AsyncTask
データベースからアイテムをより効率的に受け取るために、アプリのフラグメントにを追加することにしました。
ジェネリックをVoid, Void, List<Object>
(Object
作成したオブジェクトはどこにあるのか) に設定し、内部メソッドは次のように設定します。
private class GetObjectsTask extends AsyncTask<Void, Void, List<Object>> {
@Override
protected List<Object> doInBackground(Void... params) {
SQLiteDatabase db = mDbHelper.getInstance(getActivity().getApplicationContext()).getReadableDatabase();
String[] projection = {
.........
};
String sortOrder = ...;
Cursor c = db.query(TABLE_NAME, projection, null, null, null, null, sortOrder);
while(c.moveToNext()) {
long itemId = ...;
String title = ...;
long startMil = ...;
long endMil = ...;
mList.add(new Object(itemId, title, new Date(startMil), new Date(endMil), null, null));
}
db.close();
return mList;
}
}
同じフラグメントからタスクを呼び出す方法は次のとおりです。
new GetObjectsTask().execute((Void[]) null);
タスクの実行後、配列の項目を表示するようにリスト ビューを設定しました。
以前はまったく同じコードがタスクなしで使用されていたため、動作するはずです。問題は、そうではないということです。
mList
この内部タスク クラスを保持しているフラグメントで定義されているため、動作することを期待していました。
このような動作の原因は何ですか?
また、返されたアイテムも表示するようにタスクをリスト ビューに設定することは可能でしょうか (推奨されますか)。(オーバーライドすることによりonPostExecute(Result)
)
ありがとうございました!