【问题标题】:Cant Retrieve Firabase Storage image URL无法检索 Firebase 存储图像 URL
【发布时间】:2019-01-09 12:20:36
【问题描述】:

在我的应用中,用户可以通过我的应用将他们的图片上传到 Firebase 存储和数据库中,但我无法检索上传图片的 URL 来设置他们的个人资料图片

private FirebaseAuth mAuth;

private DatabaseReference databaseReference;

private StorageReference UserProfileImageRef;
String currentUserID;

databaseReference=FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
UserProfileImageRef=FirebaseStorage.getInstance().getReference().child("Profile Images");

databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
            {
                if(dataSnapshot.exists())
                {
    String q=UserProfileImageRef.getDownloadUrl().toString();
                Toast.makeText(SetupActivity.this, "url"+q, Toast.LENGTH_SHORT).show();
               Glide.with(SetupActivity.this)
                        .load(q)
                        .into(ProfileImage);

            }
        }



        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

enter image description hereenter code here

【问题讨论】:

  • 我试过这种方式

标签: android


【解决方案1】:
databaseReference=FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID).child("profileimage");

您忘记添加子“profileimage”

更新: 您的下载网址与 Firebase 存储中的不同。我以为你拿错了下载地址。

参考此链接:https://stackoverflow.com/a/50572357/9346054

filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.d(TAG, "onSuccess: uri= "+ uri.toString());
                //You store the download in database.
                //set value databaseReference=FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID).child("profileimage").setValue(uri.toString()).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if(task.isSuccessful()){
                    //Success store the link in the database.
                    Toast.makeText( getApplicationContext(), "Success",Toast.LENGTH_SHORT ).show();
                }
            }
        });
            }
        });
    }
});

根据您的回答更新: 试试这个

  Uri resulturi = result.getUri();
        final StorageReference filepath = UserProfileImageRef.child(currentUserID + ".jpg");
        filepath.putFile(resulturi).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if (task.isSuccessful()) {

                    //Okay part ni dia ambik link kat firebase storage akan pergi ke photoUri kat student tuu
                    filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            //Update in database
                            databaseReference.child("profileimage").setValue(String.valueOf(uri));
                            Toast.makeText(SetupActivity.this, "successfully", Toast.LENGTH_SHORT).show();
                            progressDialog.dismiss();
                        }
                    });


                }

            }
        });

【讨论】:

  • @VoraRavi 我认为当您想将下载 url 存储在 firebase 数据库中时会遇到问题。我已经更新了答案
  • 不,兄弟,我不必担心上传和字符串图像,唯一的问题是检索上传图像的 URL,如...(https://.....//. jpg)如果此 URL 将检索而不是固定
  • @VoraRavi 问题是您存储在数据库中的字符串 url 不是您的 firebase 存储中的图像 url。
  • 你能粘贴那行作为 url
【解决方案2】:
Uri resulturi=result.getUri();
            StorageReference filepath=UserProfileImageRef .child(currentUserID +".jpg");
            filepath.putFile(resulturi).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
                {
                    if (task.isSuccessful())
                    {
                        Intent selfIntent=new Intent(SetupActivity.this,SetupActivity.class);
                        startActivity(selfIntent);


                        Toast.makeText(SetupActivity.this, "success", Toast.LENGTH_SHORT).show();
                        final String downloadurl =task.getResult().getStorage().getDownloadUrl().toString();
                        databaseReference.child("profileimage").setValue(downloadurl)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task)
                                    {
                                        if(task.isSuccessful())
                                        {
                                            Toast.makeText(SetupActivity.this, "successfully", Toast.LENGTH_SHORT).show();
                                            progressDialog.dismiss();

                                        }
                                        else
                                        {
                                            String message=task.getException().getMessage();
                                            Toast.makeText(SetupActivity.this, "error"+message, Toast.LENGTH_SHORT).show();
                                            progressDialog.dismiss();
                                        }
                                    }

                                });
                    }

                }
            });
        }

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 2020-09-26
    • 2017-07-02
    • 1970-01-01
    • 2020-10-23
    • 2017-08-30
    • 2020-07-10
    相关资源
    最近更新 更多