我的问题与 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 的示例。
请问你们能帮帮我吗?谢谢。
最佳答案
看起来 SimpleCursorAdapter
的实例化必须发生在 UI 线程上。您可以通过让 doInBackground()
返回 cursor
并在 onPostExecute()
中设置适配器来做到这一点。
参见 Painless Threading如果您还没有。
关于Android:SQLiteCursor/SimpleCursorAdapter 在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172763/