让Asynctask返回Cursor

时间:2016-05-20 08:40:08

标签: java android android-asynctask

我编写了一个Asynctask来从db获取数据并返回游标。但是,当我在主线程中调用它并将其传递给游标时,Android studio会给我一个错误。我根据android开发文档做了所有这些,我无法理解我做错了什么。

这是我的asynctask:

public class FetchDataDay extends AsyncTask<DatabaseContract, Cursor, Cursor> {

    @Override
    protected Cursor doInBackground(DatabaseContract... params) {

        Cursor cursor = null;
        try {
             cursor = params[0].getSteps(System.currentTimeMillis());
        } catch (ParseException e) {
            e.printStackTrace();
        }

       return cursor;
    }

    @Override
    protected void onPostExecute(Cursor cursor) {
        super.onPostExecute(cursor);

    }
}

在这里,我称之为任务:

 public void initday() {

   Cursor cursor = new FetchDataDay().execute(databaseHandler);

//这一行给我一个错误,说明错误的返回类型。

    if (cursor.getCount() != 0) {
        cursor.moveToFirst();
        do {
            //doing something with the data
        } while (cursor.moveToNext());
    }



}

2 个答案:

答案 0 :(得分:2)

  

Cursor cursor = new FetchDataDay()。execute(databaseHandler);这
  line给出了一个错误,说明错误的返回类型。

如下所示:

AsyncTask.execute(Params...):方法返回类型为void,而不是Cursor类型。

根据onPostExecute方法结果,使用doInBackground更新用户界面。

如果FetchDataDay是单独的类,那么使用interface创建一个custom event listener,当调用onPostExecute方法时,它会在调用者类中通知。

答案 1 :(得分:0)

将UI线程的所有工作放入onPostExecute,它应该可以工作。