В моем приложении пользователь может публиковать в своей стене, как в 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);