我的任务是从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
日志。
那么,我该怎么做才能解决这个问题呢?