Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任务com.google.firebase.a.v被java.util.concurrent.ThreadPoolExecutor拒绝_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

任务com.google.firebase.a.v被java.util.concurrent.ThreadPoolExecutor拒绝

任务com.google.firebase.a.v被java.util.concurrent.ThreadPoolExecutor拒绝,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,朋友们 我想知道这个错误。我正在安卓系统中使用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, que

朋友们

我想知道这个错误。我正在安卓系统中使用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]
错误发生在
片段
中的
数据更改
,该片段正在读取信息以填充
回收视图

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

谢谢,对不起,因为我知道我没有详细解释这个问题,但我真的不知道为什么会发生这种情况

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

                    });
                }
            }

        }
    });
}
if(!pet.isupload()){
File image=新文件(pet.getPicPath());
最终StorageReference referenceImage=storageRef.child(“Adopcion”+“/”+pet.getOwner()+“/”+“Adopcion”+“/”+pet.getName()+pet.getAnimalID());
Uri image2=Uri.parse(“”);
if(image.exists()){
image2=Uri.fromFile(新文件(image.toURI());
}
UploadTask taskImage=referenceImage.putFile(image2);
taskImage.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
if(task.getResult().getDownloadUrl()!=null){
pet.setUploaded(真);
pet.setPicPath(task.getResult().getDownloadUrl().toString());
mReference.child(String.valueOf(pet.getAnimalID()).setValue(pet.addOnCompleteListener(新OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
如果(getActivity()!=null){
文件夹=getActivity().getCacheDir();
File myFile=新文件(文件夹,String.valueOf(pet.getAnimalID())+“.jpg”);
如果(myFile.exists()){
myFile.delete();
}
}
}
});
}
}
}
});
}
编辑修复 这个问题之所以发生,是因为图像被上传了很多次,因为一旦上传成功,我将我的宠物状态IsUpload更改为true。然而,Firebase需要几秒钟来进行更改,因此图像被上传了很多次

我为解决这个问题所做的,可能不是解决它的最佳方法,但在我找到更好的方法之前,它是有效的。 我只是使用一个数组来存储宠物id,一旦执行了上载,我就跟踪宠物id以知道图像已经上载,然后防止图像再次排队


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

我是如何修复这个问题的

这个问题之所以发生,是因为图像被上传了很多次,因为一旦上传成功,我将我的宠物状态IsUpload更改为true。然而,Firebase需要几秒钟来进行更改,因此图像被上传了很多次

我为解决这个问题所做的,可能不是解决它的最佳方法,但在我找到更好的方法之前,它是有效的。我只是使用一个数组来存储宠物id,一旦执行了上载,我就跟踪宠物id以知道图像已经上载,然后防止图像再次排队


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

有可能您使用的是有缺陷的firebase版本。在花了4个小时寻找解决方案并再次学习Android中的多线程之后!对我来说,最终的解决办法是降级到另一个版本

对我来说,这个版本的依赖是有效的

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

您可以在读取信息的位置共享代码吗?(片段)\pool size=2,active threads=2,queued tasks=128,completed tasks=0似乎您已经开始130个任务,2个正在运行,没有一个任务完成。因此,可能您的任务需要太多时间才能完成,您可以显示一些UploadTask的代码吗?我添加了一个编辑,解释如何解决此问题。请提供您的解决方案作为此问题的答案。以前,您使用哪个版本获得此异常?我收到此错误,并通过将依赖项升级到最新版本来修复它。(提示:在android studio中,有一个firebase工具可以自动为您添加依赖项。这些工具无法正常工作)