Android 在Firebase数据库中保存ArrayList
我正在构建一个移动消息应用程序 我想创建一个聊天组,用户在其中使用复选框选择成员,然后将所选用户的标识符保存在列表中,该列表将保存在Firebase数据库中 当我想将用户保存到数据库时,应用程序崩溃的问题 我的日志: com.google.firebase.database.DatabaseException:反序列化时应为列表,但得到的类为java.lang.String 代码: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
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)