来自java.util.concurrent.ThreadPoolExecutor

时间:2017-08-26 18:43:55

标签: java android firebase firebase-realtime-database

我想知道这个错误。我在Android中使用Firebase。完整的错误是:

Fatal Exception: java.util.concurrent.RejectedExecutionException
Task com.google.firebase.a.v@61b9a00 rejected from java.util.concurrent.ThreadPoolExecutor@eacc239[Running, pool size = 2, active threads = 2, queued tasks = 128, completed tasks = 0]

错误发生在DataChange内的Fragment,正在阅读信息以填充RecyclerView

我想知道为什么会发生这种情况以及我应该如何避免这种错误。

谢谢你,对不起,因为我知道我没有详细解释这个问题,但我真的不知道为什么会这样。

修改

这是我意识到它显示错误的代码。这一切都始于我试图同时上传超过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();
                                }
                            }
                        }

                    });
                }
            }

        }
    });
}

EDIT FIX

问题正在发生,因为图片被多次上传,因为一旦上传成功完成,我将我的宠物状态isUploaded更改为true。但是,Firebase需要几秒钟才能进行更改,因此图片上传了很多次。

我为解决这个问题所采取的措施,可能不是解决问题的最佳方法,但它一直有效,直到我找到更好的方法。 我只是使用一个数组来存储宠物ID,一旦上传,我跟踪了宠物ID,知道图像已经上传,然后阻止图像再次排队。

在修复之前,我意识到如果图像是离线创建的,图像上传的次数会超过10次甚至更多。

2 个答案:

答案 0 :(得分:3)

您使用的是错误版本的Firebase。在浪费了4个小时之后,寻找解决方案并学习了Android AGAIN中的多线程!对我来说,最终的解决方案是降级到另一个版本。

对我来说,这种版本的依赖有效。

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

答案 1 :(得分:0)

我如何解决问题

问题正在发生,因为图片被多次上传,因为一旦上传成功完成,我将我的宠物状态isUploaded更改为true。但是,Firebase需要几秒钟才能进行更改,因此图片上传了很多次。

我为解决这个问题所采取的措施,可能不是解决问题的最佳方法,但它一直有效,直到我找到更好的方法。我只是使用一个数组存储宠物ID,一旦上传,我跟踪宠物ID,知道图像已经上传,然后阻止图像再次排队。

在修复之前,我意识到如果图像是离线创建的,图像上传的次数会超过10次甚至更多。