Добавить логический массив в качестве поля в документ Firestore - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу добавить поле массива integar для всех пользователей в моей коллекции пользователей.

Я обнаружил, что для этого лучше использовать List, чем массив.( Запись массива в Firebase android ).

После добавления этого целочисленного массива в мою уже работающую процедуру регистрации пользователей он отлично загружается в базу данных.однако впоследствии у него возникают проблемы со входом в систему. В результате возникает следующая ошибка:

java.lang.RuntimeException: Не удалось десериализовать объект.Класс java.util.List имеет параметры универсального типа, вместо этого используйте GenericTypeIndicator (находится в поле «остановки»)

В этом разделе кода в операции входа в систему:

 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);
                        }
                    }
                });

Конкретно на данный момент:

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

Вот мой 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);
}

База данных выглядит следующим образом

Коллекция> Пользователи

Документы> erEq5iWy1Fd1Jaj3wl2AeMOlXp62

Поля> avatar: null, электронная почта "bob@gmail.com, classLoader: null, остановки: [0,0,0,0,0,0]", user_id: "erEq5iWy1Fd1Jaj3W3W3w3W", имя пользователя:" bob "

1 Ответ

0 голосов
/ 20 февраля 2019

Вам необходимо предоставить универсальный тип в свой список.

List<Integer> stops;

Пример класса вашей модели

    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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...