我的问题与Android有关。我有以下代码(省略了非相关部分):
public class MyActivity extends ListActivity {
protected void onResume() {
super.onResume();
new UpdateTask().execute();
}
private class UpdateTask extends AsyncTask<Object, Object, ListAdapter> {
protected ListAdapter doInBackground(Object... params) {
SQLiteCursor cursor = db.getSomeData();
startManagingCursor(cursor);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, ..., cursor, ..., ...);
return adapter;
}
protected void onPostExecute(ListAdapter result) {
listView.setAdapter(result);
}
}
}
这会导致RuntimeException - “无法在实例化SimpleCursorAdapter的行中创建未调用Looper.prepare()的线程内的处理程序。
我理解为什么会发生这种情况,我只是不知道如何修复它(将其保存在一个单独的线程中)。我找到了这个帖子:
http://groups.google.com/group/android-developers/browse_thread/thread/34d0069bb2de925e?fwc=2
但我真的不明白答复。我没有谷歌任何 涉及SQLiteCursor和AsyncQueryHandler的示例。
你能帮忙吗?感谢。答案 0 :(得分:5)
看起来实例化SimpleCursorAdapter
必须在UI线程上发生。您可以通过doInBackground()
返回cursor
并在onPostExecute()
中设置适配器来实现此目的。
如果您还没有,请参见Painless Threading。
答案 1 :(得分:0)
只需输入Looper.prepare();在引发此类错误的方法的顶部