将侦听器添加到具有类似数据列表的Firebase [英] Adding listener to firebase having List like data
本文介绍了将侦听器添加到具有类似数据列表的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我的问题:
- 当我在<$ c中保存JSON数据$ c>shared_with_emails键然后我的数据会自动附加
\
斜杠。这是正常的,或者我在这里做错了什么?
- 我怎样才能得到整个节点基于这个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:
- 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?- 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 undershared_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屋!
查看全文