我编写了一个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());
}
}
答案 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,它应该可以工作。