我放下一些代码将图像上传到我的Firebase存储,然后检索URL以使用它将图像显示为我的应用程序android的配置文件图片。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 2 && resultCode == RESULT_OK){
Uri uri = data.getData();
StorageReference filepath = mStorage.child("Photos").child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Map<String, Object> data = new HashMap<>();
data.put("ProfilePic", filepath.toString());
db.collection("Accounts").document(user.getUid())
.set(data, SetOptions.merge())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});
}
});
}
}
与filepath变量一起,我用它来将图像的url保存到account文件夹内的数据库中。因此,每个图片都有一个唯一的个人资料参考。
问题是文件路径的返回值。例如,它显示了Firebase内部的路径
gs://eyesee-gd23b.appspot.com/image/44405857
所以我尝试使用
filepath.getDownloadUrl()
但我检索的是
之类的内容,而不是我可以在Firebase网页上看到的URLcom.google.android.gms.tasks.zzu@dsd873
有什么建议吗?
答案 0 :(得分:0)
Firebase手册指出:
getDownloadUrl() : Task<Uri>
:异步检索具有可撤销令牌的长期下载URL。
关键字是异步的。您可以通过设置filepath.putFile(uri)
或onSuccessListener
来获得与onCompleteListener
得到的结果几乎相同的方法。或循环filepath.getDownloadUrl().getResult()
直到返回结果,但这并不正确。
onSuccessListener
调用onSuccess(Uri result)
,您可以对其进行覆盖并直接根据需要执行结果。仅在任务没有失败时调用。否则,您也需要onFailureListener
。
onCompleteListener
调用onComplete(Task<Uri> thisTask)
,您可以检查失败并通过thistask.getResult()
获得结果。