Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Android 在Firebase数据库中保存ArrayList_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 在Firebase数据库中保存ArrayList

Android 在Firebase数据库中保存ArrayList,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在构建一个移动消息应用程序 我想创建一个聊天组,用户在其中使用复选框选择成员,然后将所选用户的标识符保存在列表中,该列表将保存在Firebase数据库中 当我想将用户保存到数据库时,应用程序崩溃的问题 我的日志: com.google.firebase.database.DatabaseException:反序列化时应为列表,但得到的类为java.lang.String 代码: private void CreateNewGroup(最终字符串groupName){ groupNameRef

我正在构建一个移动消息应用程序

我想创建一个聊天组,用户在其中使用复选框选择成员,然后将所选用户的标识符保存在列表中,该列表将保存在Firebase数据库中

当我想将用户保存到数据库时,应用程序崩溃的问题

我的日志:

com.google.firebase.database.DatabaseException:反序列化时应为列表,但得到的类为java.lang.String

代码:

private void CreateNewGroup(最终字符串groupName){
groupNameRef=FirebaseDatabase.getInstance().getReference().child(“组”);
DatabaseReference push=groupNameRef.push();
字符串push_id=push.getKey();
断言推送id!=null;
DatabaseReference ref=FirebaseDatabase.getInstance().getReference(“组”).child(推送id);
Map hasMap=新HashMap();
hasMap.put(“groupName”,groupName);
hasMap.put(“Admin”,firebaseUser.getUid());
hasMap.put(“成员”,“成员”);
ref.setValue(hasMap).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Toast.makeText(选择groupActivity.this,“Saved”+groupName,Toast.LENGTH\u SHORT.show();
}
});
DatabaseReference ref2=FirebaseDatabase.getInstance().getReference(“组”+“/”+
推送id+“/”+“成员”);
SharedReferences myPref2=选择GroupActivity.this.getSharedReferences(“data2”,Context.MODE\u PRIVATE);
Set set1=myPref2.getStringSet(“key2”,null);
断言set1!=null;
ArrayList namesList=新的ArrayList(set1);
ref2.setValue(namesList).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务)
{
if(task.issusccessful())
{
Toast.makeText(选择groupActivity.this,“Success”,Toast.LENGTH_SHORT.show();
}
}
});
}
还有我的模范班

import java.util.List;

public class Groups
{
    private String groupName;
    private List<String> members;
    private String Admin;

    public Groups() {}

    public Groups(String groupName, List<String> members, String Admin) {
        this.groupName = groupName;
        this.members = members;
        this.Admin = Admin;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public List<String> getMembers() {
        return members;
    }

    public void setMembers(List<String> members) {
        this.members = members;
    }

    public String getAdmin() {
        return Admin;
    }
    public void setAdmin(String admin) {
        Admin = admin;
    }
}
import java.util.List;
公课组
{
私有字符串组名;
非公开名单成员;
私有字符串管理;
公共组(){}
公共组(字符串组名、列表成员、字符串管理员){
this.groupName=groupName;
这个.成员=成员;
this.Admin=Admin;
}
公共字符串getGroupName(){
返回groupName;
}
public void setGroupName(字符串groupName){
this.groupName=groupName;
}
公共列表getMembers(){
返回成员;
}
公共成员(列表成员){
这个.成员=成员;
}
公共字符串getAdmin(){
返回管理员;
}
公共void setAdmin(字符串管理){
管理员=管理员;
}
}
数据库:


您不能在firebase中存储阵列。要么重构数据库,要么以字符串形式存储成员,如
MemberA、MemberB、MemberC
或分别存储其id。因此,您可以像下面那样设置成员值

ArrayList<String> namesList = new ArrayList<>(set1);
String strNameList = "";
for (int i = -; i < namesList.size(); i++) {
    strNameList += namesList[i] + ",";
}

ref2.setValue(strNameList);
因此,如果你想了解groupA的成员,你可以这样做

// considering that you have the group name value
// Ex. groupA
database.child("members").child("groupA"). addValueEventListener(...)

您可以查看有关如何构造数据的文档

您不能在firebase中存储阵列。要么重构数据库,要么以字符串形式存储成员,如
MemberA、MemberB、MemberC
或分别存储其id。因此,您可以像下面那样设置成员值

ArrayList<String> namesList = new ArrayList<>(set1);
String strNameList = "";
for (int i = -; i < namesList.size(); i++) {
    strNameList += namesList[i] + ",";
}

ref2.setValue(strNameList);
因此,如果你想了解groupA的成员,你可以这样做

// considering that you have the group name value
// Ex. groupA
database.child("members").child("groupA"). addValueEventListener(...)

您可以查看有关如何构造数据的文档

请您详细解释第二个解决方案(我的哈希集包含我要存储的选中用户的ID)请您详细解释第二个解决方案(我的哈希集包含我要存储的选中用户的ID)