【问题标题】:Firebase Storage exception and Crashlytics exception does not match?Firebase 存储异常和 Crashlytics 异常不匹配?
【发布时间】:2019-01-05 03:32:53
【问题描述】:

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

【问题讨论】:

    标签: java android firebase firebase-storage crashlytics


    【解决方案1】:

    您的帖子未显示文件下载的代码。我假设它在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);
                }
            }
        }
    });
    

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

    【讨论】:

    • 感谢您的回答。我的代码正是你所展示的。仍然会报告异常。
    • 很难猜出为什么这段代码不起作用。您可能需要添加一些日志语句来验证您是否进入了onComplete() 回调。还要仔细检查 Crashlytics 中的堆栈跟踪,以确认异常是对 getFile() 的调用而不是其他调用的结果。
    • 奇怪的是,并非所有设备都无法识别此错误代码。只有少数设备我会看到此错误。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2023-02-21
      • 2013-01-07
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多