未从 firebase 数据库中检索个人资料图片
Posted
技术标签:
【中文标题】未从 firebase 数据库中检索个人资料图片【英文标题】:Not retrieving Profile Image from firebase database 【发布时间】:2021-01-15 21:38:52 【问题描述】:“我正在尝试将个人资料照片上传到 Firebase。但它没有检索到应用程序。当我上传照片时它正在工作。但没有检索。如何解决这个问题?”
'在这里,当用户选择图像时,我们可以在此处裁剪该图像。以及上传到火力基地的图片。'
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Gallery && resultCode == RESULT_OK && data!= null)
Uri imageUri = data.getData();
// start picker to get image for cropping and then use the image in cropping activity
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1,1)
.start(this);
//crop image
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK)
progressDialog.setTitle("Set profile Image");
progressDialog.setMessage("Your profile image is updating..");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
Uri resultUri = result.getUri();
final StorageReference filePath = profileImageReference.child(currentUserID + ".jpg");//new profile image created
//upload image to firebase storage
filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>()
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
if (task.isSuccessful())
Toast.makeText(SettingsActivity.this, "Profile Image uploaded...", Toast.LENGTH_SHORT).show();
final String downloadUri = filePath.getDownloadUrl().toString();
rootReference.child("Users").child(currentUserID).child("image")
.setValue(downloadUri)
.addOnCompleteListener(new OnCompleteListener<Void>()
@Override
public void onComplete(@NonNull Task<Void> task)
if (task.isSuccessful())
Toast.makeText(SettingsActivity.this, "Image Saved", Toast.LENGTH_SHORT).show();
else
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
);
else
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
);
'在这部分检索用户信息和图像文件。'
private void RetrieveUserInformation()
rootReference.child("Users").child(currentUserID)
.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
if ((snapshot.exists()) && (snapshot.hasChild("name") && (snapshot.hasChild("image"))))
String retrieveUserName = snapshot.child("name").getValue().toString();
String retrieveDescription = snapshot.child("description").getValue().toString();
String retrieveProfileImage = (String) snapshot.child("image").getValue();
userName.setText(retrieveUserName);
description.setText(retrieveDescription);
Picasso.get().load(retrieveProfileImage).into(profileImage);
else if ((snapshot.exists()) && (snapshot.hasChild("name")))
String retrieveUserName = snapshot.child("name").getValue().toString();
String retrieveDescription = snapshot.child("description").getValue().toString();
userName.setText(retrieveUserName);
description.setText(retrieveDescription);
else
Toast.makeText(SettingsActivity.this, "Please, Update your information...", Toast.LENGTH_SHORT).show();
@Override
public void onCancelled(@NonNull DatabaseError error)
);
【问题讨论】:
首先,停止忽略错误。使用Log.d(TAG, databaseError.getMessage());
。您是否在 logcat 中打印了一些内容?请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。
【参考方案1】:
我不熟悉毕加索,但 Glide。所以我会在上面写一个理论。让我们开始吧。
此问题可能是由 Firebase 存储拒绝此类请求引起的,因为可能没有通过 Picasso 将用户身份验证标头附加到此类请求。要验证这一点,请暂时启用对 Firebase 存储的公开读取权限。
rules_version = '2';
service firebase.storage
match /b/bucket/o
match /allPaths=**
allow write: if request.auth != null;
allow read: if true;
如果是这种情况,将显示您的图像。
【讨论】:
感谢@WeiChan 的回复。我会检查的。 我检查一下。但这不是问题所在。在firebase中一切都是正确的。我认为错误来自编码方面。以上是关于未从 firebase 数据库中检索个人资料图片的主要内容,如果未能解决你的问题,请参考以下文章
图片未从 Firebase 数据库中的 Picasso 的 URL 加载