如何在实时数据库中附加到数组列表?

时间:2018-10-01 12:58:05

标签: java android firebase firebase-realtime-database

我有一个包含用户的电子邮件,角色和联系人列表的数据库。

enter image description here

我有添加联系人的代码,当您输入EditText时,它将检查数据库中是否存在电子邮件,如果存在,它将电子邮件添加到联系人列表中。但是,我的数据库中什么也没添加。

    public void searchContacts(final String emailInput){
    final DatabaseReference users;

    users = FirebaseDatabase.getInstance().getReference("users");
    users.orderByChild("email").equalTo(emailInput).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot userSnapshot: dataSnapshot.getChildren()){
                if((userSnapshot.child("email").getValue(String.class).equals(emailInput))){
                    users.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("contacts").child(emailInput).setValue(true);
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

未添加任何内容,因为您尚未创建列表。要解决此问题,请使用以下代码:

public void searchContacts(final String emailInput){
    DatabaseReference users = FirebaseDatabase.getInstance().getReference("users");
    users.orderByChild("email").equalTo(emailInput).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            List<String> list = new ArrayList<>(); //Create the list
            for (DataSnapshot userSnapshot: dataSnapshot.getChildren()){
                String email = userSnapshot.child("email").getValue(String.class);
                if(email.equals(emailInput)){
                    users.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("contacts").child(emailInput).setValue(true);
                    list.add(email); //Add the email the list
                }
            }

            //Do what you need to do with list
        }
    }
}