java - 如何修复时间戳 java + firestore 问题?
问题描述
我正在根据 firestore 和 java android 创建一个聊天应用程序,根据https://firebase.google.com/docs/reference/android/com/google/firebase/Timestamp按时间戳对聊天进行排序
但是排序每次都取决于设备时间,即使设备上的时间是错误的,这让我很失望,请帮忙!!
我的上传时间戳代码:
Timestamp dd= Timestamp.now();
long tt=dd.getSeconds();
hashMap.put("ServerTimes",tt);
我的下载时间戳代码:
@Override
public void onBindViewHolder(@NonNull final MessageAdapter.ViewHolder holder, int position) {
Chat chat = mChat.get(position);
long date = (long) chat.getServerTimes();
Date date3 = new Date ();
date3.setTime(date*1000);
SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy EEE");
SimpleDateFormat format2 = new SimpleDateFormat("h:mm:s a");
String dateDisplay1 = format1.format(date3);
String dateDisplay2 = format2.format(date3);
String DateTime= dateDisplay1+" -- "+dateDisplay2;
我的排序代码:
private void readMessages(final String myEmail, final String OtherUserEmail, final String imageUrl) {
final List<Chat> mChat = new ArrayList<>();
referenceContent.orderBy("ServerTimes", Query.Direction.ASCENDING) .addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
................
解决方案
如果您不想依赖客户端时间戳,可以告诉 Firestore编写服务器端时间戳。从该文档链接:
// Update the timestamp field with the value from the server Map<String,Object> updates = new HashMap<>(); updates.put("timestamp", FieldValue.serverTimestamp()); docRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() { ...
推荐阅读
- javascript - 如果选中/未选中复选框,则将项目添加/删除到数组中?(钩子,不是基于类的组件)
- php - 从序列化数组中获取值
- c++ - 编译 ZeroMQ 的服务器示例时出错
- rust - 我不明白为什么必须克隆而不引用变量
- javascript - 基于单元更改的电子邮件通知
- c# - 演员词典
到字典 - imagemagick - 调整平铺图像的大小
- python - 一个简单的 jQuery on click 函数来删除一个属性
- qt - 如何构建和使用 QtDataVisualization::DeclarativeSurface?
- javascript - Javascript中指数数的余数