我是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呢? –