我决定在我的应用中为片段添加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);
执行任务后,我设置了一个列表视图来显示数组中的项目 在没有任务的情况下使用完全相同的代码,因此它应该工作。 问题是 - 它没有。 <{1}}在持有此内部任务类的片段中定义,因此我希望它能够正常工作。
可能导致此类行为的原因是什么?
此外,是否可以(并建议)使任务设置列表视图以显示返回的项目? (通过覆盖mList
)
谢谢!
答案 0 :(得分:5)
onPostExecute(Result)正是您应该初始化listview并设置适配器的地方。原因onPostExecute()在主UI线程中运行。