2017-01-17 9 views
5
私がAndroidアプリとユーザーはこのアプリを起動するたびに開発してい

、それはこのユーザーからの(存在しない場合)、新規登録、更新時に既存のデータ、そして私のアプリを生成します。ユーザーノードにさらに情報を挿入します。アンドロイドFirebase更新のみいくつかのフィールド

私はこのノードを更新するたびに、他のすべての情報が失われます。

マイユーザクラス

@IgnoreExtraProperties 
public class User { 

public String userID; 
public String userName; 
public String userMail; 
public boolean active; 

    public User() {} 

    public User(String userID, String userName) { 
     this.userID = userID; 
     this.userName = userName; 
    } 

    public User(String userID, String userName, String userMail, boolean active) { 
     this.userID = userID; 
     this.userName = userName; 
     this.userMail = userMail; 
     this.active = active; 

    } 

    @Exclude 
    public Map<String, Object> toMap() { 
     HashMap<String, Object> result = new HashMap<>(); 
     result.put("user_id", userID); 
     result.put("name", userName); 
     result.put("email", userMail); 
     result.put("active", active); 

     return result; 
    } 

} 

そして、私の更新コード:
public class FireBaseUser { 
    public static String FB_REFERENCE_USER = "user"; 

    public void updateUser(String userID, String userName, String userMail, boolean userActive) { 
     // Write a message to the database 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myRef = database.getReference(FB_REFERENCE_USER); 


     User user = new User(userID, userName, userMail, userActive); 
     Map<String, Object> postValues = user.toMap(); 

     Map<String, Object> childUpdates = new HashMap<>(); 
     childUpdates.put(userID, postValues); 

     myRef.updateChildren(childUpdates); 

    } 
} 

私はmyRef.updateChildren(childUpdates);を呼び出す

は、すべて私の古いデータが更新され、私の新しい子供たち(私はアプリの際に作成した)です失われた

enter image description here

+0

こんにちはを使用するようにしてください。あなたのデータベース構造を投稿してください。 –

+0

こんにちは、私は** myRef.updateChildren(childUpdates); ** – rodrigo

答えて

6

アップデートを実行しているとの言及は、パスFB_REFERENCE_USERのためである - ユーザーが含まれているパスに表示されます。

updateChildrenが交換され、それらの下の値を使用して、唯一の直接の子を更新します。したがって、更新はユーザーの子供全体を置き換えており、他のユーザーの子供はそのままにしています。それが期待される行動です。更新されていない、そのユーザのプロパティが放置されているように -

あなたがその特定のユーザーの参照を使用して更新を実行する必要があります。ある

は、あなたがこのような何かをする必要があります。updateChildrenの動作はドキュメントにhereに記載されている

User user = new User(userID, userName, userMail, userActive); 
Map<String, Object> postValues = user.toMap(); 
myRef.child(userID).updateChildren(postValues); 

5

あなたが唯一のいくつかのフィールドを更新したい場合は、

myRef.child(userID).child("which field do you want to update").setValue(ValueVariable); 
+0

コマンドを実行した後、瞬間から画像をアップロードこんにちは、ありがとう、私はこれをして大丈夫です。 しかし、私は "クリーン"モードで** user **クラスを使用しようとしています。 – rodrigo

+1

@rodrigo必要なすべてのデータをUserクラスに追加する必要があります。 –

+0

@ AldiRenaldiGunawan-これは完璧でした!しかし、もう一度あなたの助けが必要です。これは完璧でした。なぜなら、8フェイルズから、私は1フィックスを更新する必要があったからです。これは実行時間を実際に節約します。しかし、今私は8feildsのうち3つだけを更新する必要がありますか?それらの3つのフィールドだけを含む小さなオブジェクトでそれを更新するどんなトリックですか? – user3833732

関連する問題