相关文章推荐
粗眉毛的啄木鸟  ·  python ...·  3 周前    · 
低调的饭盒  ·  javascript - ...·  10 月前    · 

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

我想创建一个聊天组,让用户使用复选框选择成员,然后将所选用户的标识符保存在一个列表中,该列表将保存在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;
    
android
firebase
firebase-realtime-database
Yousra
Yousra
发布于 2019-04-19
1 个回答
elbert rivas
elbert rivas
发布于 2019-04-19
已采纳
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