FirebaseStorage

时间:2017-12-27 15:25:04

标签: java android firebase firebase-storage

我以这种方式使用Firebase存储下载图像:

StorageReference storageReference = FirebaseStorage.getInstance().getReference();
storageReference.child("images/").child("myimage.jpg").getBytes(Long.MAX_VALUE).addOnCompleteListener(this);

我添加了一个听众,知道下载完成的时间:

@Override
public void onComplete(@NonNull Task<byte[]> task)
{
    //stuff...
}

当我删除I​​nternet,尝试下载图像并销毁活动时,会出现问题。应该销毁该调用,因为活动被销毁,但它仍然存储。事实上,当我激活Internet时,尽管活动被破坏,仍会调用onComplete方法。最后不再再次创建,我使用日志检查了所有内容。那我怎么能打断电话呢?为什么这个方法叫做?

2 个答案:

答案 0 :(得分:2)

任务API有你的背:使用addOn[...]Listener(Activity, On[...]Listener)变体。然后,将在活动的onStop()方法中自动删除侦听器。对于您的情况,它看起来像这样:

...addOnCompleteListener(this, this);

这是documentation.

答案 1 :(得分:0)

请考虑使用StorageReference.html#getFile方法,以便获得可取消的FileDownloadTask

让我们打电话给onCreate()拨打电话,并希望以onDestroy()方式取消,

/**
 * reference to the download file task
 */
FileDownloadTask downloadTask;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // get the StorageReference to the images folder
    StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("images/");
    // create the download file task
    downloadTask = storageReference.getFile(new File("myimage.jpg"));
    // this activity should also implement OnCompleteListener<FileDownloadTask.TaskSnapshot>
    downloadTask.addOnCompleteListener(this);
}

@Override
protected void onDestroy() {
    if (downloadTask != null) {
        downloadTask.cancel();
        downloadTask = null;
    }
    super.onDestroy();
}

此处文档中的更多信息:
https://developers.google.com/android/reference/com/google/firebase/storage/StorageReference
https://developers.google.com/android/reference/com/google/firebase/storage/FileDownloadTask
https://developers.google.com/android/reference/com/google/firebase/storage/FileDownloadTask.TaskSnapshot

希望这会有所帮助。