我對如何使用Listeners在類和活動之間傳遞信息存在一些混淆。使用Listener完成AsyncTask的觸發事件
這種情況是這樣的:
我有一個任務,從Sqlite數據庫中讀取數據,並將這些數據放入一個ArrayList中傳遞給Adapter,然後將其顯示在屏幕上。
問題:
當我嘗試使用值更新偵聽器接口時,我的應用崩潰。它不顯示logcat中的任何內容......它只是掛起應用程序。 有人可以指出我哪裏出錯了。 - 謝謝
詳細信息:
我有一個名爲DatbaseRoutines的類完成數據庫處理,並在其中執行繁重的內部方法。該方法正在使用AsyncTask,以免佔用主線程。
我創建和接口與一個方法
public interface DatabaseProcessListener {
public void ProcessingIsDone(boolean blnProcessIsFinished);
}
在我DatabaseRoutines類我創建一個私有變量
private DatabaseProcessListener dbProcesslistener;
隨着二傳手它
public void setDbProcesslistener(DatabaseProcessListener dbProcesslistener) {
this.dbProcesslistener = dbProcesslistener;
}
處理完成後,我使用PostExecute方法來更新監聽器,以便這樣做在聽者的值更改爲真(即數據庫處理完成)以下 是代碼
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);
} ;
終於在顯示來自我實現監聽數據庫中收集的數據的活動。見下文。
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;
}
}
一些挖我發現logcat的後error..its一個空指針異常
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)
不幸的是,應用程序是懸掛和接口永遠不會更新顯示與真(即數據處理完成的活動)
請指點我正確的方向。 - 謝謝
的你是否onPostExecute()得到調用了你的AsyncTask。 – Anirudh 2013-05-04 13:09:36
是的,我做到了。我放了一個斷點,它只是在調用偵聽器的行上凍結。謝謝 – KuriaNdungu 2013-05-05 06:35:42