Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:Firebase数据库中是否存在数据的检查列表_Java_Android_Database_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Android: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

我正在尝试制作和应用程序,将我的联系人列表备份到firebase数据库。我可以将所有联系人存储到数据库中,但当我保存新号码并再次按下同步按钮时,它会再次推送所有联系人。我有我的联系人的ArrayList现在我想检查每个联系人是否已经存在于firebase中。如果不存在,则应将其插入

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,谢谢你的解决方案。我已经解决了它。尽管我会投票给你。因为我现在很高兴。很高兴听到你解决了它,希望你按照你说的投票给我的答案。谢谢。干杯!