Je suis débutant dans AsyncTask, et j'ai eu un problème. J'ai AsyncTask, qui enregistre des informations dans DB en appelant la fonction d'une autre classe. Le problème est que la méthode onPostExecute appelle avant que ma fonction se termine; Voici mon code:Comment attendre jusqu'à ce que la méthode d'une autre classe dans asynctask se termine dans 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();
}
}
Je l'ai déjà essayé de mettre tous les appels en OnPreExecute, mais le résultat est toujours le même. Aussi, comme un avis, le premier bloc de code sql (cycle) est géré avec succès, pas comme gestionnaire de films et d'utilisateurs. Comment appeler launchRecyclerView après l'exécution complète d'AsyncTask?
'Le problème est que la méthode onPostExecute appelle avant ma fonction finishes' probablement vous utilisez un autre fil de de' doInBackground' workThread –
onPostExecute exécutera seulement après la fin de doInBackground. Si FilmHandler et Userhandler sont implémentés sur un thread séparé, cela peut provoquer le problème. Pour éviter cela, n'utilisez pas un autre thread pour enregistrer des données dans DB au lieu de compléter l'ensemble des données d'enregistrement dans le doInBackground lui-même. –
Alors, comment pourrais-je lancer FilmHandler et UserHandler int dans le même fil? –