Java Android:Firebase数据库中是否存在数据的检查列表
我正在尝试制作和应用程序,将我的联系人列表备份到firebase数据库。我可以将所有联系人存储到数据库中,但当我保存新号码并再次按下同步按钮时,它会再次推送所有联系人。我有我的联系人的ArrayList现在我想检查每个联系人是否已经存在于firebase中。如果不存在,则应将其插入Java Android:Firebase数据库中是否存在数据的检查列表,java,android,database,firebase,firebase-realtime-database,Java,Android,Database,Firebase,Firebase Realtime Database,我正在尝试制作和应用程序,将我的联系人列表备份到firebase数据库。我可以将所有联系人存储到数据库中,但当我保存新号码并再次按下同步按钮时,它会再次推送所有联系人。我有我的联系人的ArrayList现在我想检查每个联系人是否已经存在于firebase中。如果不存在,则应将其插入 public void SyncNow(View view) { final DatabaseReference root = FirebaseDatabase.getInstance().getRefere
public void SyncNow(View view) {
final DatabaseReference root = FirebaseDatabase.getInstance().getReference();
for (i=0; i<storeContacts.size(); i++){
UserContact contact = storeContacts.get(i);
final String number = contact.getContactNumber();
Query query = root.child("contactList").orderByChild("contactNumber").equalTo(number);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
//do nothing
}else {
String key = root.push().getKey();
root.child("ContactList").child(key).setValue(contact);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
public void SyncNow(视图){
final DatabaseReference root=FirebaseDatabase.getInstance().getReference();
对于(i=0;i要解决此问题,您需要在数据库结构中做一些更改,将这些数字保存在以下数据库结构中:
Firebase-root
|
--- phoneNumbers
|
--- phoneNumberOne
| |
| --- //details
|
--- phoneNumberTwo
| |
| --- //details
|
--- phoneNumberThree
|
--- //details
现在只需检查一个数字是否存在
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference phoneNumberToCheckRef = rootRef.child("phoneNumbers").child(phoneNumberToCheck");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()) {
//Add number
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
phoneNumberToCheckRef.addListenerForSingleValueEvent(valueEventListener);
您用于每个循环,然后我认为所有记录都将添加到没有firebase数据库的记录中
for (UserContact contact:storeContacts){
}
这是因为firebase中允许复制记录。您应该阅读有关非规范化的内容不要向firebase添加新数据,只需更新整个数据库即可tree@Ameer如何更新整棵树?设置包含联系人的节点的值,因为当您按下并获取一个键时,它将添加一条新记录。@Ameer您想说的是设置节点吗我尝试了这个root.child(“ContactList”).setValue(contacts);它不起作用。是否有任何可能的方法将arraylist设置为节点值?嗨,Alex,谢谢你的解决方案。我已经解决了它。尽管我会投票给你。因为我现在很高兴。很高兴听到你解决了它,希望你按照你说的投票给我的答案。谢谢。干杯!