Android:SQLiteCursor/SimpleCursorAdapter 在后台

标签 android database multithreading background adapter

我的问题与 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/

相关文章:

android - RecyclerView如何处理不同 View 的回收?

android - 无法在 Android Studio 新项目中解析 com.android.support :appcompat-v7:26. 1.0

java - 使用 Apache 发出 http 请求时如何捕获 InterruptedException?

Android textview 包装自定义 View

java - 情况下的 Hibernate 映射,其中键也用作多对一参数

mysql - 错误1005(HY000): Can't create table 'test_schema.#sql-44c_2a' (errno: 150)

database - 对象关闭时不允许操作 - 在第一行创建表语句?

java静态同步方法

multithreading - Gwt 和 html5 多线程/WebGL 支持

android - 如何在没有 adb shell 的情况下在 android 中运行二进制文件