2016-08-24 7 views
1

私はfirebaseでこのフラット構造を設計しました。Firebase Flatten構造とpojoを作成するandroid

1-私は、このJSONのためにアンドロイドにPOJOクラスを作成したい:

{ 
    "groups": { 
     "alpha": { 
      "members": { 
       "brinchen": true, 
       "mchen": true 
      }, 
      "name": "Alpha Tango" 
     }, 
     "bravo": { 
      "members": { 
       "brinchen": true 
      }, 
      "name": "Bravo Romeo" 
     }, 
     "charlie": { 
      "members": { 
       "hmadi": true, 
       "mchen": true 
      }, 
      "name": "Charlie Whiskey" 
     }, 
     "delta": { 
      "name": "Delta Kilo" 
     }, 
     "echo": { 
      "name": "Echo Lima" 
     }, 
     "foxtrot": { 
      "name": "Foxtrot November" 
     } 

    }, 

    "users": { 
     "brinchen": { 
      "groups": { 
       "alpha": true, 
       "bravo": true 
      }, 
      "name": "Byambyn Rinchen" 
     }, 
     "hmadi": { 
      "groups": { 
       "charlie": true 
      }, 
      "name": "Hamadi Madi" 
     }, 
     "mchen": { 
      "groups": { 
       "alpha": true, 
       "charlie": true 
      }, 
      "name": "Mary Chen" 
     } 

    } 
} 

私は2つの質問があります。どうすればいいですか?

2 - たとえば、ユーザーjsonの "brinchen - > john"のようなユーザー名を更新する場合、johonとbrinchenのメンバーのjsonグループをどのように一致させることができますか?

答えて

0

を処理するには、POJOが必要です。たとえば、あなたは/以下を持っている必要がありますできます

// Group or Team, you name it 
public class Group { 

    private String id; 
    private String name; 
    private List<String> members; 

    public Group(){} 

    public Group(JSONObject object) throws JSONException { 
     this.id = object.getString("id"); 
     this.name = object.getString("name"); 
     members = new ArrayList<>(); 
     JSONArray list = object.getJSONArray("members"); 
     if(list!=null){ 
      for (int i = 0; i < list.length(); i++) { 
       members.add(((JSONObject)list.get(i)).getString("name")); 
      } 
     } 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<String> getMembers() { 
     return members; 
    } 

    public void setMembers(List<String> members) { 
     this.members = members; 
    } 
} 


public class User { 

    private String id; 
    private String name; 
    private List<String> groups; 

    public User(){} 

    public User(JSONObject object) throws JSONException { 
     this.id = object.getString("id"); 
     this.name = object.getString("name"); 
     groups = new ArrayList<>(); 
     JSONArray list = object.getJSONArray("groups"); 
     if(list!=null){ 
      for (int i = 0; i < list.length(); i++) { 
       groups.add(((JSONObject)list.get(i)).getString("groupId")); 
      } 
     } 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<String> getGroups() { 
     return groups; 
    } 

    public void setGroups(List<String> groups) { 
     this.groups = groups; 
    } 
} 

3)私は、Firebase全く好きではないのですが、Androidの上の通常のJSONの解析では、あなたが次の操作を行います:

JSONObject teamInformation = Service.getTeamInformation(); 

ArrayList<Group> myGroup = new ArrayList<>(); 
JSONArray groupList = teamInformation.getJSONObject("groups"); 
if(groupList!=null){ 
    for (int i = 0; i < groupList.length(); i++) { 
     myGroup.add(new Group((JSONObject)groupList.get(i))); 
    } 
} 

ArrayList<User> myUsers = new ArrayList<>(); 
JSONArray userList = teamInformation.getJSONObject("users"); 
if(userList!=null){ 
    for (int i = 0; i < userList.length(); i++) { 
     myUsers.add(new User((JSONObject)userList.get(i))); 
    } 
} 

EDIT:Firebase文書に基づいて

、onDateChangedあなたます。public void(DataSnapShotスナップ)上次の(あなたの構造がわからないイムが、このようなその何か - グループのみJSON部)ことによってJSONにあなたの結果を変換することができます:あなたの答えのための

public void onDateChanged(DataSnapShot snap) { 
    for (DataSnapshot alert : alerts.getChildren()) { 
     System.out.println(alert.child("id").getValue(); 
     System.out.println(alert.child("name").getValue(); 
     for (DataSnapshot recipient : alert.child("members").getChildren()) { 
      System.out.println(recipient.child("name").getValue(); 
     } 
    } 
} 
+0

感謝していますが、この文書にHTTPSをお読みください://firebase.google.com/docs/database/android/structure-data – mustafasevgi

+0

はい。私はそれを知っています。 Firebaseの変更されたJSON構造を使用する代わりに、基本的なJSONObjectを使用しました。 どちらの方法でも、オブジェクトを解析するメカニズムは、onDataChanged()を指定したものに従っているようです。 また、メソッド上にそれらのFirebaseオブジェクトを取得することで、説明したようなPOJOにそれらを移植することができます。 ヘッドアップありがとう! –

関連する問題