내 문제는 Android와 관련이 있습니다. 다음 코드 (비 관련 부분은 생략) 한 :Android : SQLiteCursor/SimpleCursorAdapter in background
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)는 _requerying_ 때문에 API 레벨 11에서 'SimpleCursorAdapter' 생성자가 더 이상 사용되지 않음을 보여줍니다. 기본 콘텐츠가 변경 사항을 브로드 캐스팅 할 때 UI 스레드. 이전 API에 맞서 개발 중이라면 UI 스레드에 다시 쿼리하거나 사용자 자신의'ResourceCursorAdapter'를 굴려야하는 것처럼 보입니다. –
API 레벨 7을 사용하고 있습니다. SimpleCursorAdapter가 실제로 어떻게 동작하는지 보려면 몇 가지 테스트를 수행해야합니다. 그러나 UI 스레드를 차단한다고 판단되는 경우에도 다른 옵션은 표시되지 않으므로 그대로 두어야합니다. 고마워, 로버트 – Jarek