我正在建立一个移动消息应用程序。
我想创建一个聊天组,让用户使用复选框选择成员,然后将所选用户的标识符保存在一个列表中,该列表将保存在Firebase数据库中。
当我想把用户保存到数据库时,我的应用程序崩溃了。
我的logcat。
com.google.firebase.database.DatabaseException。在反序列化的时候期望一个List,但是得到了一个java.lang.String类。
Code:
private void CreateNewGroup(final String groupName) {
groupNameRef = FirebaseDatabase.getInstance().getReference().child("Groups");
DatabaseReference push = groupNameRef.push();
String push_id = push.getKey();
assert push_id != null;
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Groups").child(push_id);
Map<String, String> hasMap = new HashMap<>();
hasMap.put("groupName", groupName);
hasMap.put("Admin", firebaseUser.getUid());
hasMap.put("members", "");
ref.setValue(hasMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(SelectGroupActivity.this, "Saved" + groupName, Toast.LENGTH_SHORT).show();
DatabaseReference ref2 = FirebaseDatabase.getInstance().getReference("Groups" + "/" +
push_id + "/" + "members");
SharedPreferences myPref2 = SelectGroupActivity.this.getSharedPreferences("data2", Context.MODE_PRIVATE);
Set<String> set1 = myPref2.getStringSet("key2", null);
assert set1 != null;
ArrayList<String> namesList = new ArrayList<>(set1);
ref2.setValue(namesList).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task)
if(task.isSuccessful())
Toast.makeText(SelectGroupActivity.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;
1 个回答
0 人赞同
你不能在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);
或者你可以重组你的数据库。我个人建议这样做。
groups
groupA
admin
members
groupA
0: "Alpha"
1: "Bravo"
因此,如果你想知道A组的成员,你可以这样做。
// considering that you have the group name value