2017-02-19 2 views
0

ich in FirebaseZuhörer Hinzufügen Liste wie Daten

"shared_items" : { 
    "-KgGHdgE3L_m6ppVgn99" : { 
     "_id" : 14, 
     "added_date" : "08/Mar/2017", 
     "shared_with_emails" : "{\"[email protected]*com\":{\"name\":\"Customer Care\"},\"[email protected]*com\":{\"name\":\"Customercare\"}}", 
     "user_display_name" : "Logged in user", 
     "users_email" : "[email protected]" 
    } 
    } 

Meine Fragen dieser Struktur müssen Feuerbasis mit:

  1. Wenn ich in "shared_with_emails" Schlüssel JSON-Daten speichere dann werden meine Daten automatisch mit "\" angehängt Schrägstrich. Ist das normal oder mache ich hier etwas falsch?
  2. Wie kann ich den gesamten Knoten basierend auf E-Mail-IDs in diesem JSON-Objekt erhalten.

Funktion JSON-Objekte aus versehen Kontakte zu erstellen ..

public class JsonUtils { 
    final private static String TAG = JsonUtils.class.getSimpleName(); 

    public String ContactsToJson() { 
     ArrayList<ContactsModel> listOfContacts = new ArrayList<>(); 
     listOfContacts.add(new ContactsModel("[email protected]", "abc")); 
     listOfContacts.add(new ContactsModel("[email protected]", "xyz")); 
     listOfContacts.add(new ContactsModel("[email protected]", "mnop")); 


     JSONObject jsonObjectChild; 
     JSONObject jsonObjectRoot = new JSONObject(); 

     for (int i = 0; i < listOfContacts.size(); i++) { 
      ContactsModel model = (ContactsModel) listOfContacts.get(i); 
      try { 
       jsonObjectChild = new JSONObject(); 
       jsonObjectChild.put("name", model.getContactName()); 
       jsonObjectRoot.put(model.getContactMail(), jsonObjectChild); 
      } catch (JSONException e){ 
       e.printStackTrace(); 
      } 

     } 

     System.out.println(jsonObjectRoot.toString()); 
     return jsonObjectRoot.toString(); 
    } 

    public class ContactsModel { 

     private int id; 
     private String mContactName; 
     private String mContactMail; 


     public ContactsModel(String contactMail, String contactName) { 
      this.mContactName = contactName; 
      this.mContactMail = contactMail; 
     } 

     public String getContactName() { 
      return mContactName; 
     } 

     public String getContactMail() { 
      return mContactMail; 
     } 
    } 

} 

Json Daten auf Firebase

enter image description here

+0

Wenn Sie eine "Sache" mit mehreren Benutzern teilen, wird daraus ein Kategorisierungsproblem. Für einen Ansatz, um das zu modellieren, siehe http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –

+0

@Frank Ich habe Ihren Beitrag gefolgt und die Schritte versucht, die Sie hat uns aber immer noch nicht die gewünschte Funktionalität erreicht. Ich habe den Fragenantrag aktualisiert, um ihn nochmals anzuschauen. – Deepesh

+0

1. Sie speichern JSON nicht, sondern speichern eine Zeichenfolge. Ohne den Code zu sehen, der das erzeugt, ist es schwierig, etwas über die Ursache/den Fehler zu sagen. 2. Nichts in dieser Struktur wird geändert, um die Daten so zu modellieren, wie ich es in der Antwort, die ich verlinkt habe, beschrieben habe. –

Antwort

0

Sieverwenden können, um mehrere E-Mails unter shared_with_email gespeichert zu haben. Wenn Sie Ihre Daten abrufen, speichern Sie sie in einem Objekt und suchen Sie, ob das Objekt die E-Mail enthält.

ArrayList<String> keys = new ArrayList<>; 

rootRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(Datasnapshot snap:datasnapshot.getChildren()){ 
       ArrayList<yourObject> current = snap.getValue(); 
       if (current.shared_with_email.contains(someEmail)){ 
        keys.add = snap.getKey(); //Check this, all we need is the key of our object. kd47qjB.... in this case 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

Sobald Sie alle Schlüssel haben. Listener hinzufügen

for(String key: keys){ 
    rootRef.child(key).addValueEventListener(new ValueEventListener(){ 
     @override 
     public void onDataChange(Datasnapshot datasnapshot){ 
      //You successfully added listener to the key where user has its email. 
      //Do your work here. 
     } 
    }); 
} 

Sie haben eine Klasse yourObject zu schaffen, die die Daten in Ihrer Datenbank Feuerbasis ähnelt.

+0

Ich möchte nur Snapshot-Daten erhalten, wenn die Mail-ID des aktuell angemeldeten Benutzers in dieser Liste vorhanden ist. – Deepesh

+0

Sie müssen dafür ein bisschen arbeiten. Wo ich "Attach your listeners here" geschrieben habe, müssen Sie etwas tun, wenn, wenn eine E-Mail vorhanden ist, den Schlüssel dieses Knotens in einer ArrayList speichern. Wenn Sie mit allen Objekten fertig sind, hängen Sie Ihre Listener einzeln an. –

+0

Können Sie bitte Ihren letzten Kommentar mit Hilfe eines Beispiels ausarbeiten. Die URL eines beliebigen Weblinks würde ebenfalls funktionieren. Danke für Ihre Hilfe. – Deepesh

Verwandte Themen