Вопрос:

Дублированный атрибут в Firebase

java android firebase firebase-realtime-database

76 просмотра

2 ответа

4384 Репутация автора

У меня есть модель NewsFeedItem, как это:

public class NewsFeedItem {
    @PropertyName("like_number")
    protected int likeCount = 0;

    @PropertyName("time")
    protected long timestamp;

    @PropertyName("ownerUid")
    protected String ownerUid;

    @PropertyName("ownerUsername")
    protected String ownerUsername;

    @PropertyName("comments")
    protected List<Comment> comments;

    @PropertyName("likes")
    protected Set<String> likes; //Store user uid of who like this status

    public NewsFeedItem() {

    }

    protected NewsFeedItem(int likeCount, long timestamp, String ownerUid, String ownerUsername, List<Comment> comments, Set<String> likes) {
        this.ownerUid = ownerUid;
        this.ownerUsername = ownerUsername;
        this.likeCount = likeCount;
        this.timestamp = timestamp;
        this.comments = comments;
        this.likes = likes;
    }

    public int getLikeCount() {
        return likeCount;
    }

    public void setLikeCount(int likeCount) {
        this.likeCount = likeCount;
    }

    public long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }

    public String getOwnerUid() {
        return ownerUid;
    }

    public void setOwnerUid(String ownerUid) {
        this.ownerUid = ownerUid;
    }

    public String getOwnerUsername() {
        return ownerUsername;
    }

    public void setOwnerUsername(String ownerUsername) {
        this.ownerUsername = ownerUsername;
    }

    public List<Comment> getComments() {
        return comments;
    }

    public void setComments(List<Comment> comments) {
        this.comments = comments;
    }

    public Set<String> getLikes() {
        return likes;
    }

    public void setLikes(Set<String> likes) {
        this.likes = likes;
    }
}

Затем я делю это на модель статуса:

@IgnoreExtraProperties
public class Status extends NewsFeedItem {
    @PropertyName("content")
    protected String content;

    @PropertyName("photo")
    protected String photoUrl;

    public Status() {
        //Required for deserialize
    }

    public Status(String ownerUid, String ownerUsername, String content, String photoUrl, int likeCount, long timestamp, List<Comment> comments, Set<String> likes) {
        super(likeCount, timestamp, ownerUid, ownerUsername, comments, likes);
        this.content = content;
        this.photoUrl = photoUrl;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getPhotoUrl() {
        return photoUrl;
    }

    public void setPhotoUrl(String photoUrl) {
        this.photoUrl = photoUrl;
    }
}

Код, отправляющий данные в Firebase:

@Override
public void pushStatusToFirebase(Status status) {
    database.getReference("status").push().setValue(status);
}

Но когда я нажимаю на Firebase like_numberи likeCountотображаю вместе вот так:

введите описание изображения здесь

Это также случилось со всем моим модельным классом. Пожалуйста, помогите мне.

Автор: nhoxbypass Источник Размещён: 06.01.2018 02:38

Ответы (2)


1 плюс

2666 Репутация автора

Попробуйте пометить @PropertyNameваши геттеры вместо полей. Еще один вариант, который может сработать - пометить @Excludeвашими получателями.

Автор: algrid Размещён: 06.01.2018 03:51

1 плюс

52876 Репутация автора

Решение

Чтобы решить эту проблему, нужно сделать все поля publicне защищенными, как они сейчас, иначе аннотации работать не будут.

Теперь аннотация учитывает как имя поля, так и имена получателя / установщика для сериализации. Эта проблема возникает из-за того, что поля, а также методы получения / установки были сериализованы, и поэтому они являются дубликатами.

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

Автор: Alex Mamo Размещён: 07.01.2018 08:52
Вопросы из категории :
32x32