Firestore ServerTimestamp иногда возвращает нулевое значение в модели - Android - PullRequest
0 голосов
/ 09 октября 2018

В моем приложении пользователь может публиковать в своей стене, как в Facebook, и каждый раз, когда появляется новое сообщение, оно будет отображаться в RecyclerView, как только оно будет сохранено в моей коллекции.Ранее я использовал системное время устройства, чтобы сохранить временную метку без какой-либо ошибки.Но так как это неправильный подход, теперь я сохраняю его в поле документа, используя FieldValue.serverTimestamp(), и он также работает очень хорошо, но есть новая проблема.Так как сценарий - всякий раз, когда появляется новое сообщение, этот элемент немедленно отображается в RecyclerView с помощью POJO и addSnapshotListener, но теперь отметка времени становится нулевой в каждом новом добавленном элементе или новом элементе , но когда я перезапускаю приложение, отметка времени верна.

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.bitwise.rotaractclubapp, PID: 23528
              java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Date com.google.firebase.i.d()' on a null object reference
                  at com.bitwise.rotaractclubapp.a.l$1$1.a(NewsfeedRecyclerAdapter.java:187)
                  at com.google.android.gms.g.w.run(Unknown Source)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5530)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:733)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
                  at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)

Это мой пример модели

//Importation
import com.google.firebase.Timestamp;


public String uid, description;
public Timestamp time;
public boolean file;

//Needed for Firebase
public NewsfeedsModel(){}

public NewsfeedsModel(String uid, String description, Timestamp time, boolean file) {
    this.uid = uid;
    this.description = description;
    this.time = time;
    this.file = file;
}

public String getUid() {
    return uid;
}

public String getDescription() {
    return description;
}

public Timestamp getTime() {
    return time;
}

public boolean isFile() {
    return file;
}

Так я конвертирую его в java.util.Date внутри onBindViewHolder, и здесь происходит ошибка, если добавляется новый элемент.

 Date date = postList.get(rightPosition).getTime().toDate();

Я также добавляю эти строки перед чем-либо еще в моем приложении в надежде, что это решит проблему.

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
            .setTimestampsInSnapshotsEnabled(true)
            .build();

    FirebaseFirestore.getInstance().setFirestoreSettings(settings);

1 Ответ

0 голосов
/ 09 октября 2018

Вы обновляете свою активность при добавлении нового элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...