Java 使异步任务返回游标

Java 使异步任务返回游标,java,android,android-asynctask,Java,Android,Android Asynctask,我已经编写了一个Asynctask来从db中获取数据并返回游标。然而,当我在主线程中调用它并将其传递给游标时,Android studio会给我一个错误。我已经按照android开发文档做了所有这些,我无法理解我做错了什么 这是我的任务: public class FetchDataDay extends AsyncTask<DatabaseContract, Cursor, Cursor> { @Override protected Cursor doInBack

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

这是我的任务:

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);

    }
}
//这行给了我一个错误,说它是错误的返回类型

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



}
Cursor Cursor=new FetchDataDay().execute(databaseHandler)<这个 行给了我一个错误,说它是错误的返回类型

如图所示:

:方法返回类型为
void
,而不是
Cursor
类型

使用
onPostExecute
根据
doInBackground
方法结果更新UI


如果
FetchDataDay
是一个单独的类,那么使用
接口创建一个
接口,当调用
onPostExecute
方法时,该接口将在调用方类中发出通知。

只要将UI线程的所有工作放入onPostExecute中,它就会工作

对不起,我不太明白。是的,Asynctask本身不返回,但我不能重写onPostExecute以返回游标。那么,我是否要声明一个全局变量,然后在onPostExecute中设置它?@RicheekDey:但是当
Cursor Cursor=new FetchDataDay().execute(databaseHandler)时行将不需要
doInBackground
方法的响应,并移动到下一行
if(cursor.getCount()!=0){
其中
cursor
对象始终null@RicheekDey:您还可以使用
get
方法,如
Cursor Cursor=new FetchDataDay()。执行(databaseHandler.get())
但这将冻结UI,直到
doInBackground
方法未完全执行。或许我可以在doInBackground中完成所有处理,然后使用所有全局变量?@RicheekDey:是的。但还需要在执行
doInBackground
后在UI线程上触发的事件来更新UI元素。
    if (cursor.getCount() != 0) {
        cursor.moveToFirst();
        do {
            //doing something with the data
        } while (cursor.moveToNext());
    }



}