Обработка класса предупреждения AsyncTask должна быть stati c, иначе могут возникнуть утечки - PullRequest
0 голосов
/ 09 июля 2020

Я создал asynctask для загрузки данных на сервер, как показано ниже. Но это предупреждение показывает. Этот класс AsyncTask должен иметь статус c, иначе могут возникнуть утечки ... Я прочитал и пробовал использовать слабый ссылочный стиль, но не могу интегрироваться в этот код. Как мне избавиться от этого предупреждения в приведенном ниже коде?.

 public void ImageUploadToServerFunction(){
        final String imageName1 = GetImageNameEditText1.trim();
        final String userName = GetUserName.trim();
        final String imageView1 = getStringImage1(bitmap1);
      
        class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog = ProgressDialog.show(UploadActivity.this,"Your Data is Uploading....",false,false);
            }
            @Override
            protected void onPostExecute(String string1) {
                super.onPostExecute(string1);
                progressDialog.dismiss();
             }
            @Override
            protected String doInBackground(Void... params) {
                ImageProcessClass imageProcessClass = new ImageProcessClass();
                HashMap<String,String> HashMapParams = new HashMap<>();
                HashMapParams.put(ImageName1, imageName1);
                HashMapParams.put(UserName, userName);
                HashMapParams.put(ImagePath1, imageView1);
                return imageProcessClass.ImageHttpRequest(ServerUploadPath, HashMapParams);
            }
        }
        AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass();
        AsyncTaskUploadClassOBJ.execute();
    }

1 Ответ

1 голос
/ 09 июля 2020

Если вы выполняете это в контексте функции, вам необходимо сделать вашу AsyncTask анонимной. Что-то вроде:

public void ImageUploadToServerFunction(){
    final String imageName1 = GetImageNameEditText1.trim();
    final String userName = GetUserName.trim();
    final String imageView1 = getStringImage1(bitmap1);
  
    new AsyncTask<Void,Void,String>() {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = ProgressDialog.show(UploadActivity.this,"Your Data is Uploading....",false,false);
        }
        @Override
        protected void onPostExecute(String string1) {
            super.onPostExecute(string1);
            progressDialog.dismiss();
         }
        @Override
        protected String doInBackground(Void... params) {
            ImageProcessClass imageProcessClass = new ImageProcessClass();
            HashMap<String,String> HashMapParams = new HashMap<>();
            HashMapParams.put(ImageName1, imageName1);
            HashMapParams.put(UserName, userName);
            HashMapParams.put(ImagePath1, imageView1);
            return imageProcessClass.ImageHttpRequest(ServerUploadPath,HashMapParams);
        }
    }.execute();
}

Но я настоятельно рекомендую больше не использовать AsyncTask в Android. Это очень грязный способ выполнения асинхронных операций, и его по праву следует исключить. Лучший способ решить эту проблему - использовать Rx Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...