2

我决定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)

谢谢!

4

1 回答 1

5

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

于 2013-08-09T21:27:46.560 回答