Acionar o evento quando o AsyncTask estiver concluído usando o Ouvinte
Estou tendo alguma confusão sobre como usar os Ouvintes para passar informações entre as aulas e as atividades.
O cenário é este:
Eu tenho uma tarefa que lê dados de um banco de dados Sqlite e coloca esses dados em um ArrayList que é passado para um adaptador que, em seguida, exibe na tela.
A questão:
Meu aplicativo falha quando tento atualizar a interface do ouvinte com um valor. Ele não mostra nada no logcat ... ele apenas trava o aplicativo. Alguém poderia gentilmente apontar onde estou errado. - Obrigado
Detalhes:
Eu tenho o processamento de banco de dados feito por uma classe chamada DatbaseRoutines e dentro dele um método interno fazendo o trabalho pesado. O método está usando o AsyncTask para não sobrecarregar o thread principal.
Eu criei e Interface com um único método
public interface DatabaseProcessListener {
public void ProcessingIsDone(boolean blnProcessIsFinished);
}
Na minha classe DatabaseRoutines estou criando uma variável privada
private DatabaseProcessListener dbProcesslistener;
junto com um setter para isso
public void setDbProcesslistener(DatabaseProcessListener dbProcesslistener) {
this.dbProcesslistener = dbProcesslistener;
}
Quando o processamento é feito, eu uso o método PostExecute para atualizar o ouvinte para que isso possa alterar o valor no ouvinte para True (ou seja, que o processamento do banco de dados é feito) abaixo é o código
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
dialog.dismiss(); //i have progress dialog during processing and its
//closed here
if (blnUpdateSucceededStatus)
{
dbProcesslistener.ProcessingIsDone(true);
}
else
{
Toast.makeText(ctx, "Transactions Processing
failed",Toast.LENGTH_SHORT);
} ;
Finalmente na atividade exibindo os dados coletados do banco de dados I Implementar o ouvinte. ver abaixo.
public class MyActivity extends Activity implements DatabaseProcessListener
{
@Override
public void ProcessingIsDone(boolean blnProcessIsFinished) {
if(blnProcessIsFinished){
PopulateExpandableListView();
}
public void PopulateExpandableListView() {
//code for populating the listview goes here;
}
}
depois de algumas escavações eu encontrei o erro logcat..its uma exceção nullpointer
05-05 11:11:18.590: ERROR/AndroidRuntime(22339): FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.mledger.DatabaseRoutines$1.onPostExecute(DatabaseRoutines.java:258)
at com.example.mledger.DatabaseRoutines$1.onPostExecute(DatabaseRoutines.java:141)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
Infelizmente o app está travando e a interface nunca atualiza a Activity que exibe dados com true (ou seja, o processamento é feito)
Me aponte na direção certa. - Obrigado