リスナーを使用してクラスとアクティビティの間で情報をやりとりする方法が混乱しています。リスナーを使用してAsyncTaskが完了したときのトリガーイベント
私はSqliteデータベースからデータを読み込んで、このデータをアダプタに渡して、それを画面に表示するArrayListにこのタスクを置きます。
質問:
リスナーインターフェイスを値で更新しようとすると、アプリケーションがクラッシュします。それはlogcatに何も表示されません...それはちょうどアプリをハングアップします。 誰かが間違っているところを親切に指摘できますか? - ありがとう
詳細:
私はデータベース処理をDatbaseRoutinesと呼ばれるクラスで行い、その内部メソッドは重い持ち上げをしています。このメソッドはAsyncTaskを使用してメインスレッドを掘り起こさないようにしています。
私はそれ
public void setDbProcesslistener(DatabaseProcessListener dbProcesslistener) {
this.dbProcesslistener = dbProcesslistener;
}
用セッターと一緒にプライベート変数
private DatabaseProcessListener dbProcesslistener;
を作成しています私のDatabaseRoutinesクラスでは、単一の方法で
public interface DatabaseProcessListener {
public void ProcessingIsDone(boolean blnProcessIsFinished);
}
を作成し、インターフェイスしています処理が完了すると、私はPostExecuteメソッドを使ってListenerを更新します。以下 (そのDB処理が行われるIE)をTrueにリスナーの値を変更コードIは、リスナーを実装し、データベースから収集されたデータを表示する活動で最後
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);
} ;
あります。下記参照。私はlogcatは、nullポインタ例外
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)
をerror..its残念ながらアプリがハングしているとのインタフェースが真でデータを表示する活動を更新したことがない(つまり、処理が行われたいくつかの掘削後
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;
}
}
)
私は正しい方向に向いています。 - ありがとう
を考えてみました誰にでも
おかげで、あなたのAsyncTaskのために呼ばれました。 – Anirudh
はい、私はしました。私はブレークポイントを置くだけで、リスナーを呼び出す行にフリーズします。ありがとうございます – KuriaNdungu