我的問題與Android有關。我有以下代碼(非相關的部分省略):Android:SQLiteCursor/SimpleCursorAdapter在後臺
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
但我真的不明白的答覆。我沒有谷歌任何 例子涉及SQLiteCursor和AsyncQueryHandler。
請問你們能幫忙嗎?謝謝。
你是對的。但是如果光標像成千上萬條記錄一樣返回,會不會阻塞UI線程? – Jarek
我認爲一旦返回遊標就會完成初始查詢,即使它有很多記錄,適配器也不會停止。 現在,[Javadocs](http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html)顯示'SimpleCursorAdapter'構造函數在API Level 11中被棄用,因爲_requerying_將會發生在UI線程,當底層內容廣播一個變化時。 如果您針對較早的API進行開發,您似乎必須忍受UI線程中的重新查詢,或者推出自己的「ResourceCursorAdapter」。 –
我正在使用API級別7.我想我將不得不執行一些測試來查看SimpleCursorAdapter的真實行爲。但即使我發現它阻止了UI線程,但我可能不得不離開它,因爲我沒有看到任何其他選項。謝謝,羅伯特。 – Jarek