Java 使异步任务返回游标
我已经编写了一个Asynctask来从db中获取数据并返回游标。然而,当我在主线程中调用它并将其传递给游标时,Android studio会给我一个错误。我已经按照android开发文档做了所有这些,我无法理解我做错了什么 这是我的任务: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
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());
}
}