2017-12-09 7 views
0
String userID = selectedCharacter.getUserID(); 
String charID = selectedCharacter.getCharID(); 
Character editedCharacter = new Character(userID, charID, name, hitPoints, armorClass, level, experience, gold); 

      databaseRef      
        .orderByChild("charID") 
        .equalTo(selectedCharacter.getCharID()) 
        .addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 
          // Translate the character to a map of its data 
          Map<String,Object> updates = editedCharacter.toMap(); 
          // Update ONLY the node with charID = editedCharacter.getCharID() 
          databaseRef.updateChildren(updates); 
         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 
          throw databaseError.toException(); 
         } 
        }); 

私はfirebaseデータベース内のキャラクターの統計情報を更新しようとしています。あなたが見ることができるように:データベースの特定の値を含む子ノードを更新する方法

here

を私が使用しているコードではなく、実際にキャラクターのルートで更新を入れています。私はここで間違って何をしていますか?私はどこにキーを格納していないので、キーを持つノードを見つける方法がわかりません。

答えて

0

Firebaseデータベースに対してクエリを実行すると、複数の結果が表示される可能性があります。したがって、スナップショットにはそれらの結果のリストが含まれています。結果が1つだけの場合でも、スナップショットには1つの結果のリストが含まれます。

あなたのコードは、スナップショットがリストであるという事実を処理する必要があります。あなたがループすることを意味するAndroidの場合snapshot.getChildren()

databaseRef      
    .orderByChild("charID") 
    .equalTo(selectedCharacter.getCharID()) 
    .addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot child: dataSnapshot.getChildren()) { 
       // Translate the character to a map of its data 
       Map<String,Object> updates = editedCharacter.toMap(); 
       // Update ONLY the node with charID = editedCharacter.getCharID() 
       child.getRef().updateChildren(updates); 
      } 
     } 
+0

解決策のようです。ありがとうございました! – Ellipses

0

代わりのdatabaseRef.updateChildren(updates);

あなたが次に

databaseRef.child(dataSnapshot.getKey()).setValue(updates)

それが動作するかどうかを確認してみてくださいでした。

関連する問題