在我的Firebase聊天应用中,在用户注册后,使用setValue为用户名和个人资料照片插入数据后,用谷歌,电子邮件和密码或Facebook登录。然后在我的个人资料活动中,我使用valueEventListener来显示用户照片和用户名,如果我在个人资料活动中再次使用setValue方法,则能够更新。但问题是它只更新当前数据,用户发布内容或评论的所有地方,用户名和个人资料照片保持不变。当用户在个人资料活动中更新他的信息时,有没有办法更新我的数据库中的所有内容?
以下是插入数据的方式
StorageReference filepath = mStorageImage.child(mImageUri.getLastPathSegment());
filepath.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
String downloadUri = taskSnapshot.getDownloadUrl().toString();
mDatabaseUsers.child(user_id).child("name").setValue(name);
mDatabaseUsers.child(user_id).child("timestampjoined").setValue(timestamp);
mDatabaseUsers.child(user_id).child("image").setValue(downloadUri);
mProgress.dismiss();
然后在我的个人资料活动中,我获得了数据
mDatabaseUser.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String timestampjoined = (String) dataSnapshot.child("timestampjoined").getValue();
String profilename = (String) dataSnapshot.child("name").getValue();
String profilepicture = (String) dataSnapshot.child("image").getValue();
Glide.with(DDiaryProfileActivity.this).load(profilepicture)
.fitCenter().diskCacheStrategy(DiskCacheStrategy.ALL).into(mProfilePicture);
((CollapsingToolbarLayout) findViewById(R.id.toolbar_profile)).setCollapsedTitleTextAppearance(R.style.CollapsingToolBar);;
((CollapsingToolbarLayout) findViewById(R.id.toolbar_profile)).setTitle(profilename);
mTimeJoined.setText("Date joined : " + timestampjoined);
mProfileName.setText(profilename);
如何在保存此数据的所有地方进行更新?
答案 0 :(得分:1)
问题不明确。请详细解释一下。发布您的数据库结构。
要在任何地方获取相同的数据,只需创建一个孩子说例如
user
-userid
-name:username
-photo:url
-timestamp:12:30
使用用户名,照片,时间戳等,然后在您想要用户详细信息的任何位置获取这些详细信息。还要在您的个人资料活动中更新此子项。 所以基本上你正在做的是获取和更新同一个孩子的所有值。