Firestore ServerTimestamp有时在模型中返回Null-Android

时间:2018-10-09 05:39:46

标签: android firebase google-cloud-firestore

在我的应用程序中,用户可以像在Facebook中一样在自己的墙上发贴,每次有新帖子发布时,该帖子一旦保存在我的收藏夹中,就会立即显示在RecyclerView中。以前,我使用设备系统时间来保存时间戳,而不会出现任何错误。但是由于这是一种错误的方法,现在我使用FieldValue.serverTimestamp()将其保存在文档字段中,它也确实可以正常工作,但是存在一个新问题。由于该场景是每当有新帖子时,该项目将立即借助POJOaddSnapshotListener在RecyclerView中显示,但现在每个新添加项目或,但是当我重新启动应用程序时,时间戳是正确的。

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

这是我将其转换为onBindViewHolder中的java.util.Date的方式,如果添加了新项目,则会在此处发生错误。

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

我也将此行添加到我的应用程序中的其他任何内容之前,希望它可以解决问题。

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

    FirebaseFirestore.getInstance().setFirestoreSettings(settings);

1 个答案:

答案 0 :(得分:0)

您在添加新项目时刷新活动。