2017-02-19 9 views
0

У меня есть эта структура в FirebaseДобавление слушателя к firebase имея список как данные

"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]" 
    } 
    } 

Мои вопросы:

  1. Когда я сохранение данных в формате JSON в "shared_with_emails" ключе, то мои данные автоматически добавленным с "\" слэш. Является ли это нормальным, или я делаю что-то неправильно здесь?
  2. Как я могу получить весь узел на основе идентификаторов электронной почты, присутствующих в этом объекте JSON.

Функция для создания JSON объектов из предоставленных контактов ..

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 данные о Firebase

enter image description here

+0

Если вы делитесь «вещью» с несколькими пользователями, она превращается в проблему категоризации. Для одного подхода к модели, см. Http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –

+0

@Frank Я следил за вашим сообщением и пробовал шаги, которые вы показал нам, но все еще не смог достичь желаемой функциональности. Я обновил запрос на запрос, чтобы любезно взглянуть на него. – Deepesh

+0

1. Вы не храните JSON, а сохраняете строку. Не видя кода, который производит это, трудно сказать что-либо о причине/исправлении. 2. Ничто в этой структуре не изменено, чтобы моделировать данные, как я описал в ответе, который я связывал. –

ответ

0

Вы можете использовать ArrayList<String>, чтобы сохранить несколько электронных писем под shared_with_email. Когда вы извлекаете данные, сохраните их внутри объекта и найдите, содержит ли объект сообщение.

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) { 

     } 
    }); 

Как только у вас есть все ключи. Добавить слушателей.

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. 
     } 
    }); 
} 

Вы должны создать класс yourObject напоминающих данные в вашей базе данных firebase.

+0

Мне бы хотелось получить данные моментального снимка всякий раз, когда в этом списке присутствует текущий идентификатор почты пользователя. – Deepesh

+0

Для этого вам придется немного поработать. Где я написал «Прикрепите своего слушателя здесь», вам нужно сделать что-то вроде, если присутствует электронная почта, сохраните ключ этого узла в некотором ArrayList. После того, как вы закончите со всеми объектами, присоедините своих слушателей индивидуально. –

+0

Не могли бы вы рассказать о своем последнем комментарии с помощью любого примера. URL-адрес любой веб-ссылки тоже будет работать. Спасибо за вашу помощь. – Deepesh

 Смежные вопросы

  • Нет связанных вопросов^_^