如何更新Firebase数据库

时间:2017-04-08 10:31:35

标签: java android firebase-realtime-database

在我的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);

如何在保存此数据的所有地方进行更新?

1 个答案:

答案 0 :(得分:1)

问题不明确。请详细解释一下。发布您的数据库结构。

要在任何地方获取相同的数据,只需创建一个孩子说例如

user
 -userid
   -name:username
   -photo:url
   -timestamp:12:30

使用用户名,照片,时间戳等,然后在您想要用户详细信息的任何位置获取这些详细信息。还要在您的个人资料活动中更新此子项。 所以基本上你正在做的是获取和更新同一个孩子的所有值。