2011-07-21 173 views
0

Android正在抱怨下面的代码需要调用Looper.prepare。我已经尝试添加Looper.prepare,但是代码在第六次执行后崩溃,导致我相信它并不像我想象的那么简单。任何建议,将不胜感激。顺便说一下,我将这段代码包装在AsyncTask中,因为我在查询执行时需要一个进度微调器。如果有更简单的东西,请让我知道。Android Looper混淆

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或从其他(背景)线程调用处理程序的SendMessage函数比主线程

+0

谢谢,我明白了。你有修复它的建议吗? –

0

您已经在的AsyncTask。异步任务加载器将创建另一个扎根于线程池中的AsyncTask。 AsyncTasks必须在UI线程上构建。他们会用这个来抓住需要的Looper。如果你要自己编写一个异步任务,并且希望以串行方式咬掉这个游标加载,那么使用非异步游标检索方式。或者摆脱AsyncTask并扩展CursorLoader并重写deliverResult(Cursor)方法作为回调。这将类似于AsyncTask中的onPostExecute