Для asyn c задачи, как я могу назначить ссылку на объект, созданный в doInBackground, на объект, который глобально определен в классе - PullRequest
0 голосов
/ 01 мая 2020

Я использую WeakReference, который глобально определен в моем классе, теперь я запустил AsyncTask для создания растрового изображения, как я могу присвоить значение этого сгенерированного растрового изображения глобальному объекту WeakReference, ниже приведен фрагмент кода

private WeakReference<Bitmap> bitmapLogo = null; // Global object defined as globally in class

.....
.....

// Execute asyncTask
new GenerateLogoAndShow(AppDatabase.getInstance(getActivity()), bindingPreview, bitmapLogo).execute();

....
....

private static class GenerateLogoAndShow extends AsyncTask<Void, WeakReference<Bitmap>, WeakReference<Bitmap>> {

        private AppDatabase appDatabase;
        private FragmentPreviewBinding bindingPreview;
        private WeakReference<Bitmap> bitmapLogo;

        GenerateLogoAndShow(AppDatabase appDatabase, FragmentPrintPreviewBinding binding, WeakReference<Bitmap> bitmapLogo) {
            this.appDatabase = appDatabase;
            this.bindingPreview = binding;
            this.bitmapLogo = bitmapLogo;
        }

        @Override
        protected WeakReference<Bitmap> doInBackground(Void... voids) {
            try {
                byte[] bytes = _appDatabase.ImageDao().getLogo();
                return new WeakReference<>(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(WeakReference<Bitmap> bitmap) {
            super.onPostExecute(bitmap);

            if (bindingPreview != null) {
                try {
                    bitmapLogo = bitmap;

                    if (bitmap.get() != null) {
                        bindingPreview.imgLogo.setImageBitmap(bitmap.get());
                    } 
                } catch (Exception e) {
                    e.printStackTrace();
                    }
            }
        }
    }

Как и в asyncTask, я создал переданную ссылку bitmapLo go и присвоенное значение в onPostExecute. Но после полного выполнения asyncTask значение bitmapLo go является нулевым

...