2017-07-20 10 views
1

Firebaseデータベースノードの "memories /"には、Memory型のオブジェクトが含まれています。 intコスト; ...}特定の「名前」フィールド(たとえば「パーティ」)を持つオブジェクトを取得し、それらを削除するか、または他の状況で「コスト」フィールド値を変更する必要があります。 私はこれを試してみました、私はこれを読んだ...Android Firebase:特定のフィールド値を持つオブジェクトを変更するにはどうすればよいですか?

memoryRef.orderByChild("party").equalTo(true).setValue(null); 

エラー

... https://firebase.google.com/docs/reference/js/firebase.database.Query

が唯一のアクションハンドラがあります...助けてくださいましたが、私はそれを感じていますシンプルでなければなりません...

答えて

0

あり、より理想的なアプローチであってもよいが、これは私のためにどのような作品である可能性があり:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("memories"); 
    ValueEventListener memListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      memoryList = new ArrayList<>(); 
      Memory memory; 

      for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 

       int cost = (int) userSnapshot.child("cost").getValue(); 
       String name = (String) userSnapshot.child("name").getValue(); 
       //Get other fields here 

       if (name.matches("party")) { 
        memory = new Memory(name , cost); 
        memoryList.add(memory); 
       } 

      } 


     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }; 

    mDatabase.addValueEventListener(memListener); 

PS:

Query query = memoryRef.orderByChild("name").equalTo("party"); 
    query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot){ 
      for (DataSnapshot child : dataSnapshot.getChildren()) { 
       //to update: 
       memoryRef.child(child.getKey()).child("cost").setValue(100); 
       //delete 
       memoryRef.child(child.getKey()).removeValue(); 
      } 
     } 
    }); 

注:indexOnルールを設定することを忘れないでください、私はちょうどここ配列にそれを追加している...あなたは

1

を必要とするあなたは、クエリを使用することができ、それを変更することができます我々はindexOnルールを設定するにはどうすればよい

{ 
    "rules": { 
    ... 
    "memories": { 
     ".indexOn": "name" 
    } 
    } 
} 
+0

:メモリ

ための「名前」にあなたのルールは次のようになりますでしょうか? –

+0

"データベース" - > "データ"の横にある "ルール"タブをクリックしてください。 詳細はこちらhttps://firebase.google.com/docs/database/security –

+0

ありがとうございました。時間がある場合は、この[質問](https://stackoverflow.com/questions/45207730/updating-firebase-database-with-nodes-created-with-push)をご覧ください。 –

関連する問題