Android: SQLiteCursor / SimpleCursorAdapter в фоновом режиме - PullRequest
3 голосов
/ 02 марта 2011

Моя проблема связана с 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 - "Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare ()" в строке, в которой создается экземпляр SimpleCursorAdapter.

Я понимаю, почему это происходит, я просто не знаю, как это исправить (сохраняя это в отдельной ветке). Я нашел эту тему:

http://groups.google.com/group/android-developers/browse_thread/thread/34d0069bb2de925e?fwc=2

Но я не очень понимаю ответ. Я не смог Google любой пример с использованием SQLiteCursor и AsyncQueryHandler.

Не могли бы вы, ребята, помочь? Спасибо.

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Похоже, что создание экземпляра SimpleCursorAdapter должно происходить в потоке пользовательского интерфейса.Вы можете сделать это, набрав doInBackground() return cursor и настроив адаптер в onPostExecute().

См. Безболезненная нить , если вы этого еще не сделали.

0 голосов
/ 26 июля 2014

просто поставь Looper.prepare ();в верхней части метода, который выдает такую ​​ошибку

...