Распределенный счетчик Firebase Firestore - не найдено свойств для сериализации - PullRequest
0 голосов
/ 27 августа 2018

Я уже прочитал и изменил свой код в соответствии с тем, что рекомендуется в этом посте .

Тем не менее, моя проблема все еще сохраняется, получая ту же ошибку:

java.lang.RuntimeException: No properties to serialize found on class com.blush.android.blush.chat.chatCloudCommunications.ChatCloudSentMessageToFirestore$Counter

Я запускаю все ниже в публичном классе под названием ChatCloudSentMessageToFirestore . Я пропустил «createCounter», «getCounter» и «incrementCounter», которые определены в одном классе. Я делаю это для того, чтобы код был коротким, и потому что он идентичен тому, что определено на веб-сайте Firebase Firestore: https://firebase.google.com/docs/firestore/solutions/counters, поэтому вряд ли будет причиной ошибки (если только они не нуждаются в каких-либо изменениях, которые я незнаю)

public class Counter {
    int numShards;

    public Counter(int numShards) {
        this.numShards = numShards;
    }
}

// counters/${ID}/shards/${NUM}
public static class Shard {
    int count;

    public Shard(){}

    public Shard(int count) {
        this.count = count;
    }
}

У меня также есть эта ссылка в том же классе:

DocumentReference counterChrisDocRef = db.collection("users")
        .document("ypiXrobQxuZ0wplN5KO8gJf934")
        .collection("conversations")
        .document("conversation0") //Specified conversation
        .collection("messageCounter")
        .document("shards");

и я пытаюсь использовать счетчики в этом методе:

public void addSentMessageToFirestoreDB(final Map<String, Object> messageSent) {
    WriteBatch batch = db.batch();

    createCounter(counterChrisDocRef, 1);

    incrementCounter(counterChrisDocRef, 1);


    DocumentReference chrisSentMessageRef = db.collection("users")
            .document("ypiXrobQxuZ0wplN5KO8gJf934")
            .collection("conversations")
            .document("conversation0") //Specified conversation
            .collection("messages")
            .document("message" +  getCount(counterChrisDocRef) + " (sent)");

    batch.set(chrisSentMessageRef, messageSent);

    batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {

        }
    });

1 Ответ

0 голосов
/ 27 августа 2018

Поскольку вы вообще не используете публичные методы получения для своих полей в своих классах, сделайте все поля public, потому что в вашем коде теперь protected. Чтобы установить значения непосредственно в ваших полях, ваши поля должны быть public. Если вы хотите, чтобы ваши поля были приватными, просто добавьте соответствующий public getters, и все будет работать нормально.

Также удалите ключевое слово static из своего класса Shard. Нет необходимости делать этот класс static.

...