Android FirebaseStorage - 如何在一段时间内完成下载任务

时间:2017-11-12 13:16:24

标签: android firebase firebase-storage

我的任务是从Firebase存储中下载一个小的xml文件(小于1MB)。 因此,我在我的活动onCreate()方法

中设置了此代码
final long MAX_DOWNLOAD_BYTES=1024*1024; // 1 MB
final String FILE_PATH_TO_DOWNLOAD="items/file";

//get the storege reference
StorageReference storageReference=FirebaseStorage.getInstance().getReference();

//submit the download task
Task<byte[]> downloadTask=storageReference.
        child(FILE_PATH_TO_DOWNLOAD).getBytes(MAX_DOWNLOAD_BYTES);

//adding listeners to the task
downloadTask
    .addOnSuccessListener(new OnSuccessListener<byte[]>() {
        public void onSuccess(byte[] bytes) {
            Log.d("DOWNLOAD_TASK", "SUCCESS");
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        public void onFailure(@NonNull Exception e) {
            Log.d("DOWNLOAD_TASK", "FAIL");
        }
    });

现在,我想要的是下载将在10秒内完成或取消并通知失败。

我在提交任务之前尝试添加这些行。

final long MAX_DOWNLOAD_TIME=10000; //10 seconds
storageReference.getStorage().setMaxDownloadRetryMillis(MAX_DOWNLOAD_TIME);
storageReference.getStorage().setMaxUploadRetryMillis(MAX_DOWNLOAD_TIME);
storageReference.getStorage().setMaxOperationRetryMillis(MAX_DOWNLOAD_TIME);

它有效,但在某些情况下似乎没有。

例如,如果我的手机网络在任务完成之前瘫痪,应用程序“卡住了”,它仍在响应,但我既看不到SUCCESS也不看FAIL日志。

我尝试以这种方式添加OnCompleteListener

downloadTask.addOnCompleteListener(new OnCompleteListener<byte[]>() {
    public void onComplete(@NonNull Task<byte[]> task) {
        Log.d("DOWNLOAD_TASK", "COMPLETE");
    }
});

但我甚至看不到COMPLETE日志。

那么,我该怎么做才能解决这个问题呢?

0 个答案:

没有答案