如何在最新版本中使用 getdownloadurl?
Posted
技术标签:
【中文标题】如何在最新版本中使用 getdownloadurl?【英文标题】:How to use getdownloadurl in recent versions? 【发布时间】:2018-12-05 23:20:33 【问题描述】: Uri downloaduri=taskSnapshot.getDownloadUrl();//here i cant use getdownloadurl() function
DatabaseReference new_prod=db.push();
new_prod.child("product name").setValue(prod_name);
new_prod.child("product price").setValue(prod_price);
new_prod.child("available stock").setValue(prod_quan);
new_prod.child("product image").setValue(downloaduri);
pd.dismiss();//fragments code
我无法使用getdownloadurl。我已经在firebase存储中存储了图像。是限制使用getdownloadurl的片段吗?我的动机是查询存储在 firebase 中。请帮助我。
【问题讨论】:
【参考方案1】:在最新版本的 Firebase Storage SDK 中删除了 taskSnapshot.getDownloadUrl()
方法。您现在需要从 StorageReference
获取下载 URL。
调用StorageReference.getDownloadUrl()
会返回Task
,因为它需要从服务器检索下载 URL。所以你需要一个完成监听器来获取实际的 URL。
来自documentation on downloading a file:
storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() @Override public void onSuccess(Uri uri) // Got the download URL for 'users/me/profile.png' in uri System.out.println(uri.toString()); ).addOnFailureListener(new OnFailureListener() @Override public void onFailure(@NonNull Exception exception) // Handle any errors );
或者,如果您在上传后立即获得下载 URL(如您的情况),则第一行可能是这样:
taskSnapshot.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
另见:
Firebase Storage getDownloadUrl() method can't be resolved Error: cannot find symbol method getDownloadUrl() of type com.google.firebase.storage.UploadTask.TaskSnapshot uploading a file and getting its download URL 上的 Firebase 文档中的示例【讨论】:
【参考方案2】:经过数小时的研究和不同的方式,这对我有用:
filepath.putFile(resultUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>()
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
//here
Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
while (!urlTask.isSuccessful());
Uri downloadUrl = urlTask.getResult();
final String sdownload_url = String.valueOf(downloadUrl);
【讨论】:
【参考方案3】:storageReference.child("YOUR_CHILD")
.putFile("FILE")
.addOnSuccessListener(new OnSuccessListener()
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
taskSnapshot
.getStorage()
.getDownloadUrl()
.addOnSuccessListener(new OnSuccessListener()
@Override
public void onSuccess(Uri uri)
//Put your result here
);
【讨论】:
【参考方案4】:以下方法对我有用。
_fbs_upload_success_listener = new OnSuccessListener<UploadTask.TaskSnapshot>()
@Override
public void onSuccess(UploadTask.TaskSnapshot _param1)
Task<Uri> urlTask = _param1.getStorage().getDownloadUrl();
while (!urlTask.isSuccessful());
Uri downloadUrl = urlTask.getResult();
String _downloadUrl = downloadUrl.toString();
;
【讨论】:
【参考方案5】:这是搜索 3 小时后对我有用的 Kotlin 解决方案
val uploadTask =
FirebaseStorage.getInstance().reference.child("images").child(imageName).putBytes(data)
uploadTask.addOnFailureListener
// Handle unsuccessful uploads
Toast.makeText(baseContext, "Failed to upload", Toast.LENGTH_LONG).show()
.addOnSuccessListener
Toast.makeText(
baseContext, "Image uploaded",
Toast.LENGTH_LONG
).show()
var downloadUrl: Uri? = null
FirebaseStorage.getInstance().reference.child("images")
.child(imageName).downloadUrl.addOnSuccessListener it1 ->
downloadUrl = it1
downloadUrl 是您的网址
【讨论】:
以上是关于如何在最新版本中使用 getdownloadurl?的主要内容,如果未能解决你的问题,请参考以下文章