私は自分のデータベースのトランザクションをUIスレッドで行っていますが、データベースが小さいのでUIが凍結することなく動作していますが、データベーストランザクションは存在しないため心配ですUIスレッドで行われます。asyncTaskでgetWritableDatabase()を実行する方法
ここでは、AsyncTaskがこれを解決する最適な解決策であることがわかりましたが、実際の例は見当たりませんでした。さらに、私はAsynctaskクラスを使ったことがありません。
private void getBookDb() {
Log.d(TAG, "getBookDb called");
mDatabase = mBookHelper.getWritableDatabase();
Cursor cursor = mDatabase.rawQuery("SELECT * FROM " + BookEntry.NAME, null);
if (cursor != null && cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
BookItem bookItem = new BookItem();
String id = cursor.getString(cursor.getColumnIndex(BookEntry.ID));
String url = cursor.getString(cursor.getColumnIndex(BookEntry.URL));
bookItem.setProductId(id);
bookItem.setUrl(url);
}
bottomRoot.setVisibility(View.VISIBLE);
} else {
Log.d(TAG, "Database is empty");
emptyRoot.setVisibility(View.VISIBLE);
}
if (cursor != null) {
cursor.close();
}
mDatabase.close();
mBookAdapter.notifyItemRangeChanged(0, mBookAdapter.getItemCount());
}
あなたはAsyncTaskでこれを行う方法を私を見ることができますしてください:
これは私がフラグメントのonCreateView
から呼び出す方法ですか?
あなたは単に非同期の 'doInBackground'から' getBookDb() 'を呼び出す必要があります。これはアプリケーション上で同様のことがあり、それは完全に動作します。 –
@TiagoOliveira' getBookDb() 'のUIスレッドを更新しています。 'doInBackground'から呼び出すのは良い考えですか? UIスレッドを 'doInBackground'から更新する予定ではないと思ったのですか? – X09
あなたは 'doInBackground'でデータを収集して返し、' onPostExecute'でUIを更新します –