如何在firebase存储中恢复文件下载?

dre*_*lav 6 android firebase firebase-storage

我需要使用firebase存储下载一个大文件,我的用户可能通过下载面临网络中断,我希望能够恢复此下载任务.

 FileDownloadTask downloadTask = firebaseStorage.getReferenceFromUrl(url).getFile(localFile);

    downloadTask.addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {

        @Override
        public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
                Log.v(TAG, "progress" + taskSnapshot.getBytesTransferred());;
            }
    });

    downloadTask.addOnFailureListener(e -> {
        CustomLogger.v(TAG, "downloadTask, on Failed: " + courseId);
        deleteFilesAfterError(courseId);
    });

    downloadTask.addOnPausedListener(taskSnapshot
            -> CustomLogger.v(TAG, "downloadTask, on paused: " + courseId));
Run Code Online (Sandbox Code Playgroud)

永远不会调用最后两个听众.当我设置完整的监听器时:

downloadTask.addOnCompleteListener()
Run Code Online (Sandbox Code Playgroud)

我的应用程序崩溃了.

即使我设置:

firebaseStorage.setMaxDownloadRetryTimeMillis(2000);
Run Code Online (Sandbox Code Playgroud)

然后在下载过程中关闭我的网络,不会触发downloadTask fail listener.该任务似乎仍在"进行中",但没有下载任何数据.该功能的文档很差.我应该怎么实施呢?

  • 失败的听众似乎被打破了
  • 当我添加一个completeListener时,它会崩溃我的应用程序
  • firebaseStorage.setMaxDownloadRetryTimeMillis似乎没有任何效果

关于如何处理文件下载的简历功能的任何想法?

Rya*_*yan 0

当你说你在下载过程中关闭网络时,你是怎么做到的?

我问的原因是因为如果您暂时离开活动以关闭网络流,那么您的问题可能是活动生命周期问题。

如果您离开该活动并且不在、 等中处理此问题onPause(),那么您可能会遇到这种行为。onStop()

除此之外,您的代码看起来与文档类似(并且我的代码工作正常),除了您没有“链接”方法来添加侦听器(应该不是问题)这一事实。

但是,您在此处复制和粘贴的代码已部分折叠,并且不显示您是否覆盖该onFailure(Exception e)方法,但我认为它已在该箭头中折叠起来。

如果您仍在处理此问题,您可以发布您在崩溃时收到的任何错误的跟踪吗?

这是一段在网络故障时工作的代码块,仅供参考:

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageReference = storage.getReferenceFromUrl("gs://your-bucket/");

storageReference.getFile(localFile).addOnSuccessListener(YourActivity.this, new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {

                    }
                }
            }).addOnFailureListener(YourActivity.this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {

                }
            }
Run Code Online (Sandbox Code Playgroud)