Задание com.google.firebase.a.v отклонено из java.util.concurrent.ThreadPoolExecutor

Друзья,

Я хотел бы знать об этой ошибке. Я использую Firebase в Android. Полная ошибка:

Fatal Exception: java.util.concurrent.RejectedExecutionException
Task [email protected] rejected from [email protected][Running, pool size = 2, active threads = 2, queued tasks = 128, completed tasks = 0]

Ошибка происходит на DataChange внутри Fragment, который читает информацию для заполнения RecyclerView.

Я хотел бы знать, почему это происходит, и как мне избежать этой ошибки.

Спасибо и извините, потому что я знаю, что не объясняю проблему в деталях, но я действительно не знаю, почему это происходит.

EDIT

Это код, где я понял, что он показывает ошибку. Все началось, когда я попытался загрузить более 5 фотографий одновременно.

if (!pet.isUploaded()) {
    File image = new File(pet.getPicPath());
    final StorageReference referenceImage = storageRef.child("Adopcion" + "/" + pet.getOwner() + "/" + "Adopcion" + "/" + pet.getName() + pet.getAnimalID());

    Uri image2 = Uri.parse("");
    if (image.exists()) {
        image2 = Uri.fromFile(new File(image.toURI()));
    }

    UploadTask taskImage = referenceImage.putFile(image2);

    taskImage.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
            if (task.isSuccessful()) {
                if (task.getResult().getDownloadUrl() != null) {
                    pet.setUploaded(true);
                    pet.setPicPath(task.getResult().getDownloadUrl().toString());
                    mReference.child(String.valueOf(pet.getAnimalID())).setValue(pet).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (getActivity() != null) {
                                File folder = getActivity().getCacheDir();
                                File myFile = new File(folder, String.valueOf(pet.getAnimalID()) + ".jpg");
                                if (myFile.exists()) {
                                    myFile.delete();
                                }
                            }
                        }

                    });
                }
            }

        }
    });
}

ОБНОВЛЕНИЕ ИСПРАВЛЕНИЕ

Проблема возникла из-за того, что изображение загружалось много раз, потому что, как только загрузка была успешно завершена, я изменил свой статус питомца isUploaded на true. Однако Firebase требуется несколько секунд, чтобы внести это изменение, поэтому изображение загружалось много раз.

То, что я сделал, чтобы решить эту проблему, возможно, не лучший способ ее решить, но это работает, пока я не найду лучший способ. Я просто использую массив для хранения идентификатора питомца, и как только загрузка была выполнена, я отслеживал идентификатор питомца, чтобы узнать, что изображение уже было загружено, а затем предотвращаю повторную отправку изображения в очередь.

Перед этим исправлением я понял, что изображение загружалось более 10 раз и даже больше, если изображение создавалось в автономном режиме.

Ответ 1

Как я решил проблему

Проблема возникла из-за того, что изображение загружалось много раз, потому что, как только загрузка была успешно завершена, я изменил свой статус питомца isUploaded на true. Однако Firebase требуется несколько секунд, чтобы внести это изменение, поэтому изображение загружалось много раз.

То, что я сделал, чтобы решить эту проблему, возможно, не лучший способ ее решить, но это работает, пока я не найду лучший способ. Я просто использую массив для хранения идентификатора питомца, и после того, как загрузка была выполнена, я отслеживал идентификатор питомца, чтобы узнать, что изображение уже было загружено, а затем предотвращаю повторную отправку изображения в очередь.

Перед этим исправлением я понял, что изображение загружалось более 10 раз и даже больше, если изображение создавалось в автономном режиме.

Ответ 2

Существует вероятность того, что вы используете ошибочную версию firebase. Потратив 4 часа на поиски решения и изучение многопоточности в Android СНОВА! Окончательное решение для меня было перейти на другую версию.

Для меня эта версия зависимости работала.

// Firebase
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-database:16.1.0'