The AsyncTask API is deprecated in Android 11. How to modify this code?

186 Views Asked by At

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);
            }
        }
    }
}
0

There are 0 best solutions below