我以这种方式使用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...
}
当我删除Internet,尝试下载图像并销毁活动时,会出现问题。应该销毁该调用,因为活动被销毁,但它仍然存储。事实上,当我激活Internet时,尽管活动被破坏,仍会调用onComplete方法。最后不再再次创建,我使用日志检查了所有内容。那我怎么能打断电话呢?为什么这个方法叫做?
答案 0 :(得分:2)
任务API有你的背:使用addOn[...]Listener(Activity, On[...]Listener)
变体。然后,将在活动的onStop()
方法中自动删除侦听器。对于您的情况,它看起来像这样:
...addOnCompleteListener(this, this);
答案 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
希望这会有所帮助。