我正在使用Firebase在Android上下载文件。这是我的代码:
try {
//.. Try to download file from Firebase
} catch(StorageException e) {
if(e.getErrorCode() == StorageException.ERROR_RETRY_LIMIT_EXCEEDED) {
//Ignore! Exception has occurred due to no Internet availability
} else {
//Other genuine failure, log it
Crashlytics.logException(e);
}
}
现在,此代码不发送“已超出操作重试限制”。例外。但是,在Crashlytics中,我仍然可以看到此异常的报告。
Non-fatal Exception: com.google.firebase.storage.StorageException
The operation retry limit has been exceeded.
Caused by javax.net.ssl.SSLException
Read error: ssl=0x7188e1fe08: I/O error during system call, Software caused connection abort
这怎么可能?我想念什么吗?
Firebase版本:16.0.1
答案 0 :(得分:4)
您的帖子未显示文件下载的代码。我假设它在Task
上具有完成侦听器。也许异常不会传播到封闭的try-block
,您需要在回调中对其进行处理,如下所示:
storageRef.getFile(contentDir).addOnCompleteListener(
new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
...
} else {
StorageException se = (StorageException) task.getException();
if (se.getErrorCode() == StorageException.ERROR_RETRY_LIMIT_EXCEEDED) {
// Ignore
} else {
Crashlytics.logException(se);
}
}
}
});
如果我认为您的下载代码有误,请更新您的帖子以包含它。
答案 1 :(得分:2)
不能保证在所有情况下都针对ERROR_RETRY_LIMIT_EXCEEDED错误设置或正确设置了StorageException的错误代码,并且可能因此导致检查失败。基本上,Firebase代码中的某个人有一个错误,即他们无法正确设置error_code(或将其设置为其他值),但是错误消息设置正确,因此当您打印错误时,看起来就像您期望的那样。错误代码值。如果可以重现错误,请设置一个断点或添加更多的异常值记录,以便您查看检查失败时的error_code。在error_code错误的情况下,请尝试添加另一条将错误消息解析为备份的检查。