Para deixar relatado,
Tive que fazer uma medida de contorno, e não uma Solução.
O esquema de activity é:
Manage->contactprovider->Manage->Formulario->Manage
Eu tive que fazer o seguinte...
Quando eu chamo de manage o contactprovider, eu já espero um ontaskresult...
Depois retorna para manage, e ao inves de usar outro startactivityforresult...
Eu uso um finish() e depois um startactivty comum para chamar o formulario, por ae...
Testes e mais testes, está funcionando sem erro no 4.1.2 e 2.3.3.
Valeu!
Em 26 de outubro de 2012 11:19, Psy Khé <psykhe6@gmail.com> escreveu:
Maicon/Senhores,Então em testes aqui...Eu vi onde estava dando o erro...era na volta para a acitvity..onactivityresult.Então limpei e refiz...Ficando simplesmente assim:protected void onActivityResult(int codigo, int resultado, Intent it) {
Log.d("POW", "onActivityResult=>resultado="+resultado);
Log.d("POW", "onActivityResult=>codigo="+codigo);
//voltou do formulario
if (codigo == FLAG) {
Log.d("POW", "manage voltou do formulario-FLAG");
//Bundle params = it != null ? it.getExtras(): null;
//voltou do search
} else if (codigo == SELECIONAR_CONTATO) {
Log.d("POW", "manage voltou do Search!");
}}O resultado do erro é o que informei...
Dizendo de duas instancias de activity ...10-26 11:14:09.185: D/POW(710): onActivityResult=>resultado=-1
10-26 11:14:09.185: D/POW(710): onActivityResult=>codigo=2
10-26 11:14:09.185: D/POW(710): manage voltou do Search!
10-26 11:14:09.226: V/PhoneStatusBar(205): setLightsOn(true)
10-26 11:14:09.766: D/dalvikvm(394): WAIT_FOR_CONCURRENT_GC blocked 0ms
10-26 11:14:09.836: D/dalvikvm(394): GC_EXPLICIT freed 186K, 4% free 8626K/8903K, paused 6ms+8ms, total 74ms
10-26 11:14:09.846: E/StrictMode(394): class com.android.contacts.activities.ContactSelectionActivity; instances=2; limit=1
10-26 11:14:09.846: E/StrictMode(394): android.os.StrictMode$InstanceCountViolation: class com.android.contacts.activities.ContactSelectionActivity; instances=2; limit=1
10-26 11:14:09.846: E/StrictMode(394): at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)O cenario eu ja lhes informei...ManageActivity-ProviderContact->ManageActivity->FormularioActivity->ManageActivityA manage chama o provider que retorna um resultado para ela...ela por vez peque o resultado e envia para o formulario...o formulario sendo fechado ou salvo volta para a manage.Hum?Grato,
Abs,Psy Khé.Em 25 de outubro de 2012 13:40, Maicon Strey <mstrey@gmail.com> escreveu:
Psy,o erro diz "Attempted to access a cursor after it has been closed.", ou seja, tu estas tentando utilizar um cursor que já foi fechado. Não parece ter relação com as activities. Dá uma olhada melhor no teu código e no log do erro.--Maicon Strey
Novo Hamburgo - RS - Brasil
------------------------------------------------------Linux user: #525086Frase de todos os dias: "Se não mandar o log eu não ajudo!"
2012/10/25 Psy Khé <psykhe6@gmail.com>--Senhores,Para algum de vocês,
Talvez resolver esse bug encontrado na minha app, seja mais simples...
Estou tentando aqui...mas sem sucesso.
O que costatei, é que...Parece que está ficando mais que uma activity no topo...algo do genero.Veja o erro:10-25 11:23:36.494: E/StrictMode(400): class com.android.contacts.activities.ContactSelectionActivity; instances=2; limit=110-25 11:23:39.364: E/AndroidRuntime(1291): FATAL EXCEPTION: main
10-25 11:23:39.364: E/AndroidRuntime(1291): java.lang.RuntimeException: Unable to resume activity {br.com.psykhe.pad/br.com.psykhe.pad.ManageActivity}: android.database.StaleDataException: Attempted to access a cursor after it has been closed.Então...o cenario é:Tenho uma activity - Manage...ela tem a opção de buscar no provider contacts um contato e trazer para ela.Segue codigo desta parte:case R.id.search:
Toast.makeText(ManageActivity.this, getString(R.string.manage_search), Toast.LENGTH_SHORT).show();
flagSearch = 1;
Uri uri = Uri.parse("content://com.android.contacts/contacts/");
itSearch = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(itSearch, SELECIONAR_CONTATO);
return true;Depois então sera retornado para essa activity o contacto...e o mesmo é tratado...caso retorne com o valor 2 de selecionar_contato...Ele vai chamar o metodo - > getContactInfo(it);Só que no final do metodo ele chama novamente outra activity...agora o do formulario com o contato preenchido que ele pegou do contact provider.Segue:Intent it = new Intent(ManageActivity.this,
FormularioActivity.class);
it.putExtra("notid", true);
ContextCarrier context = ContextCarrier.getInstance();
context.setContext(contact);
//finish();
startActivityForResult(it, FLAG);----comentarios----Seria interessante se fosse possivel mais ou menos como se encontra, manage->contactsprovider->manage->formularioPorque? Porque a pessoa vai sair do formulario e possivelmente vai salvar o contacto e voltando para o manage vai ter a lista dos contatos novamente.Caso contrario, nao sendo possivel, que é o que creio...ver uma melhor solução...Pensei na possibilidade do acesso ao contacts provider nao ser da forma feita...algo como um adapter e ser mostrado apenas uma lista e nao a chamada a activity do contacts do celular.Mas...Alguem pode tentar me auxiliar?Abraços,Att.Psy Khé.
--






0 comentários:
Postar um comentário