【问题标题】:Firebase storage download file does not fail when network unavilable网络不可用时 Firebase 存储下载文件不会失败
【发布时间】:2026-01-09 22:10:01
【问题描述】:

我正在使用以下代码从 Firebase 存储下载文件:

[来源:https://firebase.google.com/docs/storage/android/download-files]

islandRef = storageRef.child("images/island.jpg");
File localFile = File.createTempFile("images", "jpg");
islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
        // Local temp file has been created
    }
    }).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

但是,我注意到 Firebase 在没有互联网的情况下会不断重试。

这就是为什么我也尝试过:

mStoragePath.setMaxDownloadRetryTimeMillis(60000);
mStoragePath.setMaxOperationRetryTimeMillis(60000);
mStoragePath.setMaxUploadRetryTimeMillis(60000);

但这只是设置最大超时值。是否有可能一次尝试失败

谢谢。

【问题讨论】:

  • 为什么你希望它在第一次尝试后失败?可能的解决方案可能是检查您是否有网络连接并对其做出反应。

标签: android firebase firebase-storage


【解决方案1】:

这是按预期工作的:失败侦听器在任务失败时执行。当前没有连接的事实不是(立即)失败的原因,因为它可能只是网络故障,甚至(不太可能)谷歌云存储的短暂中断。

如果您想显式地在没有网络连接时立即失败,您必须在代码中显式检测该条件。见Android documentation on detecting network conditionthis answer

ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();

但您应该真正考虑在上述情况下,这种行为是否对您的用户最有帮助。

【讨论】:

    最近更新 更多