【发布时间】:2021-09-27 07:59:48
【问题描述】:
我正在使用 Firebase 实时数据库和 Firebase 存储在 Android Studio 中创建这个应用程序。当用户通过我的应用注册时,数据将存储在 Firebase 实时数据库中。然后在个人资料页面上,有一个上传图片的地方。当用户上传图片时,它将存储在 Firebase 存储中,并且链接将在数据库中相应用户下的新字段中更新。
我上次检查时它工作正常。但是当我添加一个新用户并上传他的个人资料图片时,该链接也会在所有其他用户上更新。但在 Firebase 存储中,没有任何变化。它只发生在 Firebase 实时数据库中。我找不到任何解决方案。
这是我更新个人资料链接的部分。
private void UploadProfPic(Uri image_uri) {
final StorageReference strRef = storageReference.child("users/"+ email_i +"/profile.jpg");
strRef.putFile(image_uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(getApplicationContext(), "Image has been uploaded", Toast.LENGTH_LONG).show();
strRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.get().load(uri).fit().into(profPic);
imgRef = uri.toString();
usrRF.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dss : snapshot.getChildren()){
String key = dss.getKey();
Map<String, Object> updates = new HashMap<String, Object>();
updates.put("profile_url", imgRef);
usrRF.child(key).updateChildren(updates);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show();
}
});
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull /*@org.jetbrains.annotations.NotNull*/ Exception e) {
Toast.makeText(getApplicationContext(), "Failed to update profile picture", Toast.LENGTH_LONG).show();
}
});
}
这里 usrRf = FirebaseDatabase.getInstance().getReference("users");
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
您说其他用户的链接也会更新,据我了解,您不希望这样。在这种情况下,您希望更新哪个用户?在您的屏幕截图中,我看到了三个用户。
-
我希望将该网址上传给上传图片的相应用户。在该屏幕截图中,如果克里斯蒂亚诺上传了图片,则该 url 应该在他的 uid 下更新。问题是,当图片上传后,所有其他用户的 url 也会更新。 @AlexMamo
-
好的,很公平。你在使用 Firebase 身份验证吗?
-
是的,firebase 电子邮件身份验证.. @AlexMamo
标签: java android firebase firebase-realtime-database firebase-storage