2017-07-19 3 views
0

"emails"というプロパティを持つ "UserBean"がArrayList<EmailBean>であるとします。Android - 特定のキーを持つオブジェクトプロパティのリストをFirebaseに保存

Firebaseに保存されたとき、それはのようだ:

"users" : { 
    "$userID" : { 
     "emails" : [ 
      "0" : { 
       "type" : "first", 
       "address" : "[email protected]", 
       "private" : true 
      }, 
      "1" : { 
       "type" : "second", 
       "address" : "[email protected]", 
       "private" : false" 
      } 
     ], 
     "name" : "Mitch" 
    } 
} 

だから、このような何かを達成することが可能である:

"users" : { 
    "$userID" : { 
     "emails" : [ 
      "first" : { 
       "address" : "[email protected]", 
       "private" : true 
      }, 
      "second" : { 
       "address" : "[email protected]", 
       "private" : false 
      } 
     ], 
     "name" : "Mitch" 
    } 
} 

私はAで各アドレス1を保存する必要がないことを好むだろう時間。

Firebaseに、このプロパティをキーとして使用するように指示することがありますか?

よろしくお願いいたします。

答えて

1

は、私はあなたが以下のコードを使用してお勧め:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference emailsRef = rootRef.child("users").child(userId).child("emails"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String type = ds.child("type").getValue(String.class); 
      ds.child("type").getRef().getParent().setValue(type); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
emailsRef.addListenerForSingleValueEvent(eventListener); 

は、私はこのコードを試してみましたか?ですから、あなたが望むものを達成するためには、まず、typeというキーの価値があります。次に、ツリー内にステップアップし、それぞれのノードのtypeキーの値を設定します。

0, 1 and so onの代わりにtypeの値を持つことで、作業を完了させるには、参照で直接removeValue()メソッドを使用して各ノードからtype keyを削除してください。

関連する問題