将侦听器添加到具有类似数据列表的Firebase [英] Adding listener to firebase having List like data

查看:167
本文介绍了将侦听器添加到具有类似数据列表的Firebase的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Firebase中拥有此结构

 shared_items:{
-KgGHdgE3L_m6ppVgn99:{
_id:14,
added_date:08 / Mar / 2017,
shared_with_emails:{\abc @ abc * com \:{\姓名\:\Customer Care \},\xyz @ xyz * com\:{\name \:\Customercare \}},
user_display_name:登录用户,
users_email:loggedinUser@gmail.com
}
}
$ b

我的问题:


  1. 当我在<$ c中保存JSON数据$ c>shared_with_emails键然后我的数据会自动附加\斜杠。这是正常的,或者我在这里做错了什么?

  2. 我怎样才能得到整个节点基于这个JSON对象中存在的电子邮件ID。


$ b


从提供的联系人中创建JSON对象的函数..



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

public String ContactsToJson(){
ArrayList< ContactsModel> listOfContacts = new ArrayList<>();
listOfContacts.add(new ContactsModel(abc@gmail.com,abc));
listOfContacts.add(new ContactsModel(xyz@gmail.com,xyz));
listOfContacts.add(new ContactsModel(mnop@yahoo.com,mnop));


JSONObject jsonObjectChild;
JSONObject jsonObjectRoot = new JSONObject(); (int i = 0; i< listOfContacts.size(); i ++){
ContactsModel model =(ContactsModel)listOfContacts.get(i);


尝试{
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;
私人字符串mContactMail;

$ b $公共ContactsModel(String contactMail,String contactName){
this.mContactName = contactName;
this.mContactMail = contactMail;


public String getContactName(){
return mContactName;
}

public String getContactMail(){
return mContactMail;






lockquote $ b Firebox上的Json数据
.pngrel =nofollow noreferrer>

$ b您可以使用 ArrayList< String> shared_with_email
。当您检索数据时,将其保存在对象中,并搜索对象是否包含电子邮件。

keys = new ArrayList<>; (Datasnapshot snap:datasnapshot.getChildren())

rootRef.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
{
ArrayList< yourObject> current = snap.getValue();
if(current.shared_with_email.contains(someEmail)){
keys.add = snap.getKey(); // Check在这种情况下,我们需要的是我们的对象的关键字kd47qjB ....在这种情况下
}
}
}

@Override
public void onCancelled(DatabaseError databaseError){

}
});

一旦你拥有了所有的钥匙,添加监听器。

  for(String key:keys){
rootRef.child(key).addValueEventListener(new ValueEventListener(){
@override
public void onDataChange(Datasnapshot datasnapshot){
//你成功的添加了监听器到用户有密码的地方
//在这里工作
}
});



$ b $你必须创建一个类 yourObject
code>类似于您的firebase数据库中的数据。

I have this structure in Firebase

    "shared_items" : {
    "-KgGHdgE3L_m6ppVgn99" : {
      "_id" : 14,
      "added_date" : "08/Mar/2017",
      "shared_with_emails" : "{\"abc@abc*com\":{\"name\":\"Customer Care\"},\"xyz@xyz*com\":{\"name\":\"Customercare\"}}",
      "user_display_name" : "Logged in user",
      "users_email" : "loggedinUser@gmail.com"
    }
  }

My questions:

  1. When I am saving JSON data in "shared_with_emails" key then my data is automatically appended with "\" slash. Is this normal or I am doing something wrong here?
  2. How can I get entire node based on email Ids present in this JSON object.

Function to create JSON objects from provided contacts..

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

    public String ContactsToJson() {
        ArrayList<ContactsModel> listOfContacts = new ArrayList<>();
        listOfContacts.add(new ContactsModel("abc@gmail.com", "abc"));
        listOfContacts.add(new ContactsModel("xyz@gmail.com", "xyz"));
        listOfContacts.add(new ContactsModel("mnop@yahoo.com", "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 data on Firebase

解决方案

You can use ArrayList<String> to have multiple emails saved under shared_with_email. When you retrieve your data, save it inside an object and search whether the object contains the 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) {

        }
    });

Once you have all the keys. Add listeners.

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

You will have to create a class yourObject which resembles the data in your firebase database.

这篇关于将侦听器添加到具有类似数据列表的Firebase的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆