2011-07-21 14 views
0

Androidは、以下のコードでLooper.prepareを呼び出す必要があると訴えています。私はLooper.prepareを追加しようとしましたが、コードが6回目の実行後にクラッシュし、私が思ったほどシンプルではないと信じてくれました。どんな提案もありがとうございます。ちなみにAsyncTaskでこのコードをラップしたのは、クエリが実行されている間に進行スピナーが必要だったためです。もっと簡単なことがあれば教えてください。Android Looper confusion

private class doSearch extends AsyncTask<String, String, Cursor> { 

    @Override 
    protected Cursor doInBackground(String... searchstring) { 

     [...]   
     CursorLoader loader = new CursorLoader(SearchActivity.this, codes, projection, mWhere, null, null); 
     Cursor cursor = loader.loadInBackground(); 

     return cursor; 
} 
+0

これは、AsyncTaskを持たないものの、この回答が役に立ちます。http://stackoverflow.com/questions/6732529/cant-create-handler-looper-prepare-in-inherited -activity/6732757#6732757 –

答えて

0

これは通常、あなたが関連する何かのUIをやったり、AsyncTaskに既にあるメインスレッド

+0

ありがとう、私はそれを得る。それを修正するための提案がありますか? –

0

よりも、別の(バックグラウンド)スレッドからハンドラのsendMessage関数を呼び出していることを意味します。非同期タスクローダーは、スレッドプール内の他のAsyncTaskを作成しようとしています。 AsyncTasksは、UIスレッドで構築する必要があります。彼らはこれを使って必要なルーパーをつかむ。非同期タスクを自分で作成し、このカーソル負荷を連続して捨てたい場合は、非同期カーソル取得方式を使用します。または、AsyncTaskを取り除き、CursorLoaderを拡張して、コールバックとして機能するdeliverResult(Cursor)メソッドをオーバーライドします。これは、AsyncTask内のonPostExecuteと似ています