使用AsyncTask从数据库中读取项目

时间:2013-08-09 21:17:01

标签: android performance android-asynctask android-sqlite

我决定在我的应用中为片段添加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

谢谢!

1 个答案:

答案 0 :(得分:5)

onPostExecute(Result)正是您应该初始化listview并设置适配器的地方。原因onPostExecute()在主UI线程中运行。