Друзья,
Я хотел бы знать об этой ошибке. Я использую 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 раз и даже больше, если изображение создавалось в автономном режиме.