AsyncTask - непроверенный вызов для выполнения (Params ...) - PullRequest
0 голосов
/ 26 ноября 2018

Я искал ответ часами, но безрезультатно.

Мое приложение использует cameraCaptureSessions.setRepeatingRequest и сохраняет / обновляет в TextureView privateTextureView.

Я хочу сделать снимокиз TextureView -> применить фильтр с помощью AsyncTask -> сохранить его в ImageView.Но при получении предупреждения "непроверенный вызов для выполнения (Params ...) как элемент необработанного типа AsyncTask"

Приложение падает при нажатии кнопки (AsyncTask execute).Где я не прав?

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        .
        .
        .
        privateTextureView = (TextureView)findViewById(R.id.textureView);
        privateTextureView.setSurfaceTextureListener(textureListener);

        myTask = new ApplyFilterTask();

        privateBtnGetCapture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pictureBitmap = privateTextureView.getBitmap();

                //Start MyTask
                myTask.execute(pictureBitmap);
            }
        });
    }

protected class ApplyFilterTask extends AsyncTask<Bitmap, Bitmap, Bitmap> {
        @Override
        protected void onPreExecute() {
            int color = Color.parseColor("#ffa500");
            privateImageView.setColorFilter(color);
        }

        @Override
        protected Bitmap doInBackground(Bitmap... bitmaps) {
            Bitmap bmp = bitmaps[0];
            try {
                ImageFilters filter = new ImageFilters();
                bmp = filter.applyContrastEffect(bmp, 5);
                publishProgress(bmp);
            } catch (Exception e) {
                //System.out.println("Error!!!! " + e);
            }
            return bmp;
        }

        @Override
        protected void onProgressUpdate(Bitmap... bm) {
            System.out.println("TestProgress");
            privateImageView.setImageBitmap(bm[0]);
        }
        /*
        protected void onPostExecute(Bitmap... bm) {
            System.out.println("TestExecude");
            privateImageView.setImageBitmap(bm[0]);
        }*/
    }

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вместо использования уникального экземпляра ApplyFilterTask для всех ваших задач, вы можете создавать новый экземпляр каждый раз, когда нажимаете privateBtnGetCapture, и это легко сделать следующим образом:

 privateBtnGetCapture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pictureBitmap = privateTextureView.getBitmap();

                //apply the filter this way
                new ApplyFilterTask().execute(pictureBitmap);
            }
        });
0 голосов
/ 26 ноября 2018

Ошибка приложения, о которой вы упомянули, по-видимому, связана с многократным использованием одного и того же AsyncTask.Asynctask можно использовать только один раз.Как упомянуто в официальной документации :

Задача может быть выполнена только один раз (исключение будет выдано при попытке второго выполнения.)

Ваш код создает один объект myTask, который используется каждый раз в обработчике событий OnClick.Создайте новый AsyncTask каждый раз, чтобы избежать сбоев приложения, как показано ниже.

    privateBtnGetCapture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            pictureBitmap = privateTextureView.getBitmap();
            AsyncTask<Bitmap, Bitmap, Bitmap> myTask = new ApplyFilterTask();
            //Start MyTask
            myTask.execute(pictureBitmap);
        }
    });

Предупреждение, упомянутое IDE, является отдельной проблемой, связанной с объявлением myTask.Вы, кажется, объявили myTask как AsyncTask, а не как AsyncTask<Bitmap, Bitmap, Bitmap> или ApplyFilterTask.Измените объявление, и предупреждение исчезнет.

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