Java 在Firestore中获取服务器时间戳时出错

Java 在Firestore中获取服务器时间戳时出错,java,android,firebase,google-cloud-firestore,firebaseui,Java,Android,Firebase,Google Cloud Firestore,Firebaseui,我试图在Cloud Firestore中添加文档,但我需要服务器时间戳来添加文档。文档已成功添加到具有正确时间戳的集合中。我正在添加带有警报对话框的文档。但当我返回活动时,我的应用程序会终止,并出现以下错误: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException。。。。。。。。E/AndroidRuntime: 原因:java.lang.NullPointerException:尝试调用虚拟机 方法“jav

我试图在Cloud Firestore中添加文档,但我需要服务器
时间戳
来添加文档。文档已成功添加到具有正确时间戳的集合中。我正在添加带有警报对话框的文档。但当我返回活动时,我的应用程序会终止,并出现以下错误:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException。。。。。。。。E/AndroidRuntime: 原因:java.lang.NullPointerException:尝试调用虚拟机 方法“java.util.Date com.google.firebase.Timestamp.toDate()”,在 空对象引用 位于com.sasam.virtuallibrary.Models.UserLight.setTimestamp(UserLight.java:103)

为了显示文档的属性,我使用以下查询

Query Query=FirebaseFirestore.getInstance()
.收集(“用户”)
.document(user.getUid())
.收藏(“朋友”)
.orderBy(“时间戳”,Query.Direction.DESCENDING);
我的班级在这里

public类UserLight{
受保护的字符串名称;
受保护的字符串电子邮件;
受保护的字符串uid;
保护浮动额定值;
受保护的字符串photoUrl;
受保护的长时间戳;
公共用户灯(){
}
//其他的接球手和二传手
@排除
公共长getTimestampLong(){
返回时间戳;
}
公共字段值getTimestamp(){
返回FieldValue.serverTimestamp();
}
public void setTimestamp(Timestamp Timestamp){
this.timestamp=timestamp.toDate().getTime();
}
}
处理查询中的快照的代码

Query Query=FirebaseFirestore.getInstance()
.收集(“用户”)
.document(user.getUid())
.收藏(“朋友”)
.orderBy(“时间戳”,Query.Direction.DESCENDING);
PagedList.Config Config=new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.设置预取距离(5)
.setPageSize(10)
.build();
FirestorePagingOptions选项=新建FirestorePagingOptions.Builder()
.setLifecycleOwner(此)
.setQuery(查询,配置,UserLight.class)
.build();
mAdapter=新FirestorePagingAdapter(选项){
@非空
@凌驾
public ItemFriendViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
返回新的ItemFriendViewHolder(LayoutInflater.from(parent.getContext())。充气(R.layout.rc_item_friend,parent,false));
}
@凌驾
受保护的无效onBindViewHolder(@NonNull ItemFriendViewHolder holder,int位置,@NonNull final UserLight UserLight){
holder.txtName.setText(userLight.getName());
GlideApp.with(holder.context).load(userLight.getPhotoUrl())到(holder.avata)中;
holder.cardView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(FriendListActivity.this,FinalChatActivity.class);
intent.putExtra(“朋友”,(可序列化)userLight);
星触觉(意向);
}
});
}
@凌驾
受保护的void onLoadingState已更改(@NonNull LoadingState状态){
开关(状态){
案例加载_首字母:
案例加载\u更多:
//加载动画
mSwipeRefreshLayout.setRefreshing(true);
打破
已装入案例:
//停止动画
mSwipeRefreshLayout.setRefresh(false);
打破
案件完成:
//已到达数据集的末尾
mSwipeRefreshLayout.setRefresh(false);
打破
案例错误:
重试();
打破
}
}
@凌驾
受保护的void onError(@NonNull异常e){
super.onError(e);
mSwipeRefreshLayout.setRefresh(false);
}
};
recyclerView.setAdapter(mAdapter);
mSwipeRefreshLayout.setOnRefreshListener(新的SwipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
mAdapter.refresh();
}
});
插入后的文档
代码中的问题在于
UserLight
类中的时间戳字段类型与数据库中的
时间戳属性类型不匹配。请参见,在您的
UserLight
类中,时间戳字段的类型为
long
,这基本上是一个数字,而数据库中的类型为
Date
timestamp
。请注意,两者必须匹配

因为在Cloud Firestore中保存日期的正确方法是使用
日期
时间戳
类,要解决这个问题,只需将模型类中时间戳字段的类型更改为
日期
,如我在以下帖子中的回答所述:


处理查询快照的代码是什么?添加的文档到底是什么样子的?@DougStevenson我正在使用
FirestorePagingAdapter
。我已经编辑了我的问题。。您能检查一下吗?有时应用程序终止时会出现以下错误java.lang.IllegalArgumentException:无效查询。您正在尝试使用字段“additionTime”为未提交服务器时间戳的文档启动或结束查询。(自t