我想从 Firebase 的 uploadTask.addOnProgressListener
方法获取下载网址。如何使用以下代码获取下载网址?
UploadTask uploadTask = storageRef.putBytes(data);
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>()
{
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot)
{
Log.d("aaaaasessin",""+taskSnapshot.getTask().getResult());
}
});
我使用了 taskSnapshot.getTask().getResult()
但这不起作用。
最佳答案
2019 年 8 月 22 日编辑:
Android SDK 中的 StorageReference 类最近添加了一个名为 list() 的新方法。 .
要解决此问题,您需要循环 ListResult
并调用 getDownloadUrl()
来获取每个文件的下载 URL。请记住,getDownloadUrl()
方法是异步的,因此它返回一个 Task
对象。详情请参阅下文。我什至写了一篇关于这个主题的文章,名为:
为了获取下载网址,您需要使用addOnSuccessListener
,如以下代码行所示:
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String url = uri.toString();
//Do what you need to do with url
}
});
}
});
如Firebase release notes中所示2018年5月23日提到:
Cloud Storage version 16.0.1
Removed the deprecated StorageMetadata.getDownloadUrl() and UploadTask.TaskSnapshot.getDownloadUrl() methods. To get a current download URL, use StorageReference.getDownloadUr().
现在打电话 getDownloadUrl() 时在StorageReference上它返回一个 Task
对象,而不再是一个 Uri 对象。
另请记住,如果您的设备无法到达 Firebase Storage 后端,则不会调用成功监听器或失败监听器(如果您打算使用它)。仅当数据提交至 Firebase 服务器或被 Firebase 服务器拒绝后,才会调用成功/失败监听器。
关于java - 如何从 Firebase 存储获取下载网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60395518/