我是AsyncTask中的新手,并且出现问题。 我有AsyncTask,它通过调用另一个类的函数将信息保存在数据库中。问题是onPostExecute方法在我的函数完成之前调用;这里是我的代码:如何等待asynctask中另一个类的方法在android中完成
class checkNewReviews2 extends AsyncTask<List<ReviewList.ReviewItem>, Void, Void>{
@Override
protected Void doInBackground(List<ReviewList.ReviewItem>... reviewList) {
int size = reviewList[0].size();
if(size>0) {
for (int i = 0; i < size; i++) {
ReviewList.ReviewItem r = reviewList[0].get(i);
ContentValues c = new ContentValues();
c.put(LentaClass.LentaListEntry.FILM_ID, r.getFilm_id());
c.put(LentaClass.LentaListEntry.USER_ID, r.getUser_id());
c.put(LentaClass.LentaListEntry.REVIEW_TEXT, r.getReview_text());
c.put(LentaClass.LentaListEntry.CREATED_AT, r.getCreated_at());
c.put(LentaClass.LentaListEntry.REVIEW_TYPE, r.getReview_type());
c.put(LentaClass.LentaListEntry.VIEWS, r.getViews());
sqLiteDatabase.insert(LentaClass.LentaListEntry.TABLE_NAME, null, c);
c.clear();
}
FilmHandler filmHandler = new FilmHandler(getContext());
filmHandler.HandleFilms(reviewList[0]);
UserHandler userHandler = new UserHandler(getContext());
userHandler.HandleUsers(reviewList[0]);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
initiateRecyclerView();
}
}
我已经尝试将所有调用放入onPreExecute,但结果仍然相同。另外作为通知,第一块sql代码(循环)成功处理,而不是作为电影和用户处理程序。 AsyncTask完全执行后应该如何调用initiateRecyclerView?
'的问题是,onPostExecute方法是我的功能finishes'之前,也许你正在使用其他线程的从'doInBackground' workThread –
onPostExecute只会doInBackground完成后执行调用。如果FilmHandler和Userhandler是在单独的线程上实现的,则可能会导致此问题。因此,为避免这种情况,请勿使用另一个线程将数据保存到数据库中,而是在doInBackground本身中完成整个保存数据。 –
那么我怎么能在同一个线程中运行FilmHandler和UserHandler呢? –