私は、コードを持っている:AsyncTaskをコールバックメソッドから実行するには?
private void submitExec() {
if (SQLiteDbWrapper.getInstance().getBookCount()==0) {
Toast.makeText(this, "A list of books is empty", Toast.LENGTH_LONG).show();
return;
}
SQLiteDbWrapper.getInstance().makeFacebook(this, this.getApplicationContext());
if (SQLiteDbWrapper.getInstance().getConnector().getFacebook().isSessionValid()) {
new SubmitClass().execute();
}
else {
SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {
@Override
public void onAuthSucceed() {
MyBookDroidActivity.this.executeSubmitClass();
}
@Override
public void onAuthFail(String error) {
}
};
SessionEvents.addAuthListener(listener);
SQLiteDbWrapper.getInstance().getConnector().login();
}
}
private void executeSubmitClass() {
new SubmitClass().execute();
}
このコードは、Facebookから認可とAsyncTaskを実行します。しかし、私は常に、ランタイムエラーを取得:
12-13 21:58:41.513: E/AndroidRuntime(31961): Uncaught handler: thread Thread-25 exiting due to uncaught exception
12-13 21:58:41.523: E/AndroidRuntime(31961): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-13 21:58:41.523: E/AndroidRuntime(31961): at android.os.Handler.<init>(Handler.java:121)
12-13 21:58:41.523: E/AndroidRuntime(31961): at android.app.Dialog.<init>(Dialog.java:105)
12-13 21:58:41.523: E/AndroidRuntime(31961): at android.app.AlertDialog.<init>(AlertDialog.java:63)
12-13 21:58:41.523: E/AndroidRuntime(31961): at android.app.ProgressDialog.<init>(ProgressDialog.java:80)
12-13 21:58:41.523: E/AndroidRuntime(31961): at android.app.ProgressDialog.<init>(ProgressDialog.java:76)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.nda.mybookdroid.MyBookDroidActivity$SubmitClass.onPreExecute(MyBookDroidActivity.java:115)
12-13 21:58:41.523: E/AndroidRuntime(31961): at android.os.AsyncTask.execute(AsyncTask.java:391)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.nda.mybookdroid.MyBookDroidActivity.executeSubmitClass(MyBookDroidActivity.java:101)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.nda.mybookdroid.MyBookDroidActivity.access$0(MyBookDroidActivity.java:99)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.nda.mybookdroid.MyBookDroidActivity$1.onAuthSucceed(MyBookDroidActivity.java:86)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.nda.facebook.SessionEvents.onLoginSuccess(SessionEvents.java:78)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.nda.facebook.FacebookConnector$IDRequestListener.onComplete(FacebookConnector.java:141)
12-13 21:58:41.523: E/AndroidRuntime(31961): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:254)
12-13 22:01:47.193: E/AndroidRuntime(32216): Uncaught handler: thread Thread-32 exiting due to uncaught exception
12-13 22:01:47.203: E/AndroidRuntime(32216): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-13 22:01:47.203: E/AndroidRuntime(32216): at android.os.Handler.<init>(Handler.java:121)
12-13 22:01:47.203: E/AndroidRuntime(32216): at android.app.Dialog.<init>(Dialog.java:105)
12-13 22:01:47.203: E/AndroidRuntime(32216): at android.app.AlertDialog.<init>(AlertDialog.java:63)
12-13 22:01:47.203: E/AndroidRuntime(32216): at android.app.ProgressDialog.<init>(ProgressDialog.java:80)
12-13 22:01:47.203: E/AndroidRuntime(32216): at android.app.ProgressDialog.<init>(ProgressDialog.java:76)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.nda.mybookdroid.MyBookDroidActivity$SubmitClass.onPreExecute(MyBookDroidActivity.java:115)
12-13 22:01:47.203: E/AndroidRuntime(32216): at android.os.AsyncTask.execute(AsyncTask.java:391)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.nda.mybookdroid.MyBookDroidActivity.executeSubmitClass(MyBookDroidActivity.java:101)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.nda.mybookdroid.MyBookDroidActivity.access$0(MyBookDroidActivity.java:99)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.nda.mybookdroid.MyBookDroidActivity$1.onAuthSucceed(MyBookDroidActivity.java:86)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.nda.facebook.SessionEvents.onLoginSuccess(SessionEvents.java:78)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.nda.facebook.FacebookConnector$IDRequestListener.onComplete(FacebookConnector.java:141)
12-13 22:01:47.203: E/AndroidRuntime(32216): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:254)
私はLooper.prepare()を実行しようとするが、この場合には、アプリケーションが常にフリーズ。 AsyncTaskをどのように実行すればよいですか?ありがとうございました。
ありがとうございます。私の間違いについて私に説明してもらえますか?なぜこの意味を使うべきですか?とにかくありがとうございました。 – user1078760
あなたはたぶんスレッドを読むべきです、それは複雑な話題です。 PeterとIの両方のこのような状況における重要な点は、UIスレッドからAsyncTaskを呼び出す必要があることです。それが何を意味するのか分からなければ、おそらく[this](http://developer.android.com/guide/topics/fundamentals/processes-and-threads)を含むべきである多くの勉強をしなくてはなりません。 html#スレッド)doc – kabuko
ありがとうございました。 – user1078760