1

The AsyncTask API is deprecated in Android 11. How to modify this code? I was reading about AsyncTask, and I tried the simple program below. But it does not seem to work. How can I make it work?

Please modify this code

public class EntryActivity extends BaseActivity {

private LoadListAsyncTask loadListAsyncTask;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
   
    loadListAsyncTask = new LoadListAsyncTask(this);
    loadListAsyncTask.execute();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (loadListAsyncTask != null && !loadListAsyncTask.isCancelled()) {
        loadListAsyncTask.cancel(true);
    }
}

static class LoadListAsyncTask extends AsyncTask<Void, Void, Pair<String, ArrayList<StickerPack>>> {
    private final WeakReference<EntryActivity> contextWeakReference;

    LoadListAsyncTask(EntryActivity activity) {
        this.contextWeakReference = new WeakReference<>(activity);
    }

    @Override
    protected Pair<String, ArrayList<StickerPack>> doInBackground(Void... voids) {
        ArrayList<StickerPack> stickerPackList;
        try {
            final Context context = contextWeakReference.get();
            if (context != null) {
                stickerPackList = StickerPackLoader.fetchStickerPacks(context);
                if (stickerPackList.size() == 0) {
                    return new Pair<>("could not find any packs", null);
                }
                for (StickerPack stickerPack : stickerPackList) {
                    StickerPackValidator.verifyStickerPackValidity(context, stickerPack);
                }
                return new Pair<>(null, stickerPackList);
            } else {
                return new Pair<>("could not fetch sticker packs", null);
            }
        } catch (Exception e) {
            Log.e("EntryActivity", "error fetching sticker packs", e);
            return new Pair<>(e.getMessage(), null);
        }
    }

    @Override
    protected void onPostExecute(Pair<String, ArrayList<StickerPack>> stringListPair) {

        final EntryActivity entryActivity = contextWeakReference.get();
        if (entryActivity != null) {
            if (stringListPair.first != null) {
                entryActivity.showErrorMessage(stringListPair.first);
            } else {
                entryActivity.showStickerPack(stringListPair.second);
            }
        }
    }
}
Arun D
  • 11
  • 1
  • Either copy AsyncTask.java file in your project, or use a recommended alternative like RxJava or Java Concurrent API https://stackoverflow.com/questions/58767733/the-asynctask-api-is-deprecated-in-android-11-what-are-the-alternatives – cmak Jun 14 '23 at 16:27

0 Answers0