简体   繁体   English

将布尔数组作为字段添加到Firestore文档

[英]Add boolean array as a field to Firestore document

I am looking to add a integar array field to all users in my user collection. 我希望向用户集合中的所有用户添加一个整数数组字段。

I found out to do this it is better to use a List than an array. 我发现这样做比使用数组更好。 ( Writing array in Firebase android ). 在Firebase android中编写数组 )。

Upon Adding this integar array to my already working User Registration activity,it uploads to the database perfectly well. 将这个integar数组添加到我已经在运行的User Registration活动中后,它可以完美地上传到数据库。 however it subsequently has problems logging in. producing the following error: 但是,随后登录时出现问题。产生以下错误:

java.lang.RuntimeException: Could not deserialize object. java.lang.RuntimeException:无法反序列化对象。 Class java.util.List has generic type parameters, please use GenericTypeIndicator instead (found in field 'stops') 类java.util.List具有泛型类型参数,请改用GenericTypeIndicator(在字段“ stops”中找到)

At this section of the code in the Login Activity: 在“登录活动”中代码的这一部分:

 userRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                        if(task.isSuccessful()){
                            Log.d(TAG, "onComplete: successfully set the user client." + task.getResult());
                            User user = task.getResult().toObject(User.class);
                            ((UserClient)(getApplicationContext())).setUser(user);
                        }
                    }
                });

Specifically at this point: 特别是在这一点上:

    User user = task.getResult().toObject(User.class);

Here is my User.java: 这是我的User.java:

 public class User implements Parcelable{

private String email;
private String user_id;
private String username;
private String avatar;
private List stops;
private ClassLoader classLoader;


public User(String email, String user_id, String username, String avatar, List stops, ClassLoader classLoader) {
    this.email = email;
    this.user_id = user_id;
    this.username = username;
    this.avatar = avatar;
    this.stops = stops;
    this.classLoader = classLoader;
}

public List getStops() {
    return stops;
}

public void setStops(List stops) {
    this.stops = stops;
}

public ClassLoader getClassLoader() {
    return classLoader;
}

public void setClassLoader(ClassLoader classLoader) {
    this.classLoader = classLoader;
}

public User() {

}

protected User(Parcel in) {
    email = in.readString();
    user_id = in.readString();
    username = in.readString();
    avatar = in.readString();
    in.readList(stops, classLoader);

}

public static final Creator<User> CREATOR = new Creator<User>() {
    @Override
    public User createFromParcel(Parcel in) {
        return new User(in);
    }

    @Override
    public User[] newArray(int size) {
        return new User[size];
    }
};

public String getAvatar() {
    return avatar;
}

public void setAvatar(String avatar) {
    this.avatar = avatar;
}

public static Creator<User> getCREATOR() {
    return CREATOR;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getUser_id() {
    return user_id;
}

public void setUser_id(String user_id) {
    this.user_id = user_id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}





@Override
public String toString() {
    return "User{" +
            "email='" + email + '\'' +
            ", user_id='" + user_id + '\'' +
            ", username='" + username + '\'' +
            ", avatar='" + avatar + '\'' +
            ", stops='" + stops + '\'' +
            '}';
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(email);
    dest.writeString(user_id);
    dest.writeString(username);
    dest.writeString(avatar);
    dest.writeList(stops);
}

The database looks as follows 该数据库如下所示

Collection > Users 集合>用户

Documents > erEq5iWy1Fd1Jaj3wl2AeMOlXp62 文件> erEq5iWy1Fd1Jaj3wl2AeMOlXp62

Fields> avatar: null, email "bob@gmail.com, classLoader: null, stops:[0,0,0,0,0,0]", user_id:"erEq5iWy1Fd1Jaj3wl2AeMOlXp62", username:"bob" 字段>头像:null,电子邮件“ bob @ gmail.com,classLoader:null,停止:[0,0,0,0,0,0,0]”,user_id:“ erEq5iWy1Fd1Jaj3wl2AeMOlXp62”,用户名:“ bob”

You need to provide a generic type to your List. 您需要为列表提供通用类型。

List<Integer> stops;

Your model class example 您的模型类示例

    public class User implements Parcelable{

        private String email;
        private String user_id;
        private String username;
        private String avatar;
        private List<Integer> stops;
        private ClassLoader classLoader;


        public User(String email, String user_id, String username, String avatar, List<Integer> stops, ClassLoader classLoader) {
            this.email = email;
            this.user_id = user_id;
            this.username = username;
            this.avatar = avatar;
            this.stops = stops;
            this.classLoader = classLoader;
        }


    public List<Integer> getStops() {
        return stops;
    }

    public void setStops(List<Integer> stops) {
        this.stops = stops;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM