我正在使用以下代码从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);
但这只是设置最大超时值。是否有可能一次尝试失败。
感谢。
答案 0 :(得分:0)
这是按预期工作的:失败侦听器在任务失败时执行。目前没有连接这一事实并不是(立即)失败的原因,因为它可能只是网络故障,甚至是(不太可能)谷歌云存储中的短暂中断。
如果要显式,在没有网络连接时立即失败,则必须在代码中明确检测到该条件。请参阅Android documentation on detecting network condition或this answer:
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
但在上述情况下,您应该考虑此行为是否对您的用户最有帮助。