Firebase Storage 异常和 Crashlytics 异常不匹配?

我正在使用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

这怎么可能?我错过了什么吗?

火库版本:16.0.1


答案 1

您的帖子不会显示文件下载的代码。我假设它在 .也许异常不会传播到封闭,您需要在回调中处理它,如下所示:Tasktry-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);
            }
        }
    }
});

如果我猜错了您的下载代码,请更新您的帖子以包含它。


答案 2

无法保证在所有情况下都设置或正确设置了 StorageException 的错误代码,因为ERROR_RETRY_LIMIT_EXCEEDED错误,并且您的检查可能因此而失败。基本上,Firebase代码中的某人有一个错误,他们只是无法正确设置error_code(或将其设置为其他值),但错误消息设置正确,因此当您打印错误时,除了error_code值之外,它看起来像是您期望的。如果可以重现错误,请设置断点或添加更多异常值日志记录,以便在检查失败时查看error_code。尝试添加另一个检查,用于分析错误消息,作为error_code错误的备份。


推荐