从firebase存储URL图像返回奇怪的字符串

时间:2018-10-26 20:22:19

标签: android firebase firebase-storage

我放下一些代码将图像上传到我的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网页上看到的URL
com.google.android.gms.tasks.zzu@dsd873

有什么建议吗?

1 个答案:

答案 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()获得结果。