gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:58:40 24 4
gpt4 key购买 nike

friend ,

我想知道这个错误。我在 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]

错误发生在 Fragment 内的 DataChange 上,它正在读取信息以填充 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();
}
}
}

});
}
}

}
});
}

编辑修复

出现这个问题是因为图片被上传了很多次,因为一旦上传成功完成,我就把我的宠物状态isUploaded改为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'

关于java - 任务 com.google.firebase.a.v 被 java.util.concurrent.ThreadPoolExecutor 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45898594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com