Jon*_*nny 15 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]
Run Code Online (Sandbox Code Playgroud)
错误发生在DataChangea内部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();
}
}
}
});
}
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题正在发生,因为图像被多次上传,因为一旦上传成功完成,我将我的宠物状态isUploaded更改为true.但是,Firebase需要几秒钟才能进行更改,因此图片上传了很多次.
我为解决这个问题做了什么,可能不是解决问题的最佳方法,但它一直有效,直到找到更好的方法.我只是使用一个数组来存储宠物ID,一旦上传,我跟踪了宠物ID,知道图像已经上传,然后阻止图像再次排队.
在修复之前,我意识到图像上传的次数超过10次,如果图像是离线创建的,则更多.
我是如何解决这个问题的
发生该问题的原因是图像被上传了很多次,因为一旦上传成功完成,我将我的宠物状态 isUploaded 更改为 true。但是,Firebase 需要几秒钟的时间才能进行更改,因此图像会被上传多次。
我为解决这个问题所做的可能不是解决它的最佳方法,但在我找到更好的方法之前它会起作用。我只是使用一个数组来存储宠物 id,一旦执行上传,我就跟踪宠物 id 来知道图像已经上传,然后防止图像再次排队。
在修复之前,我意识到该图像已被上传超过 10 次,如果该图像是离线创建的,则上传次数甚至更多。
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |