gpt4 book ai didi

android - Firebase 数据库的常用时间

转载 作者:行者123 更新时间:2023-11-29 15:39:20 25 4
gpt4 key购买 nike

我正在为 Android 创建一个聊天应用程序。我正在使用 Firebase 实时数据库来实现此目的。这就是数据库的“聊天”分支的样子:enter image description here

使用用户唯一 ID(例如“513”、“675”等)生成的聊天室有唯一 ID。这些聊天室内部有消息对象,这些对象也具有唯一 ID,并且在其中存储发送消息的日期信息,发件人姓名和消息文本。 Message对象的构造函数如下:

public Message(String text,String senderUID, Long date){
this.text = text;
this.senderUID = senderUID;
this.date = date;
}

这就是我为每条消息生成时间并将其发送到 firebase 数据库的方式。

sendButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
calendar = Calendar.getInstance();
String second,hour,minute;
String time;
if(calendar.get(Calendar.SECOND)<10){
second = "0"+calendar.get(Calendar.SECOND);
}
else
{
second = ""+calendar.get(Calendar.SECOND);
}

if(calendar.get(Calendar.MINUTE)<10){
minute = "0"+calendar.get(Calendar.MINUTE);

}
else
{
minute = ""+calendar.get(Calendar.MINUTE);
}

if(calendar.get(Calendar.HOUR)<10){
hour = "0"+calendar.get(Calendar.HOUR);
}
else
{
hour = ""+calendar.get(Calendar.HOUR);
}

time = date + hour + minute + second;
Log.d("time",time);
Message message = new Message(messageEditText.getText().toString(), user.getDisplayName(), Long.valueOf(time));
chatRoomDatabaseRef.child(chatID).child(user.getUid() + generateRandomNumber()).setValue(message);
messageEditText.setText("");
}
});

以下是我如何使用值事件监听器从数据库获取数据:

chatRoomDatabaseRef.child(chatID).addValueEventListener(new ValueEventListener() {

@Override
public void onDataChange(DataSnapshot dataSnapshot) {

Set<Message> set = new HashSet<Message>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Message message = snapshot.getValue(Message.class);
set.add(message);
}
messageList.clear();
messageList.addAll(set);

Collections.sort(messageList, new Comparator<Message>() {
@Override
public int compare(Message o1, Message o2) {
return Long.valueOf(o1.date).compareTo(Long.valueOf(o2.date));
}
});

messageAdapter.notifyDataSetChanged();
messageListView.setSelection(messageAdapter.getCount() - 1);
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

从 Firebase 数据库获取数据后,我根据日期属性对它们进行排序并列出它们。一切正常,但当我填写消息的日期属性时,它会根据手机上的本地时间进行填充,因为我无法正确对消息进行排序。时间可能因设备而异。我需要使用一个对于使用我的应用程序的所有设备来说都是通用且相同的时间。但我找不到办法。

编辑:我仍然无法弄清楚,但作为快速解决方案,我在数据库中创建了一个名为序列号的对象。我向消息构造函数添加了一个名为序列号的属性。我从数据库中读取序列号,将该序列号赋予下一条消息,并为新消息增加数据库中的值。然后我根据该号码对消息进行排序。这不是最好的方法,但在我找到更好的方法之前,这是一种方法。

最佳答案

试试这个

firebase
.database()
.ref("/.info/serverTimeOffset")
.on("value", function(offset) {
let offsetVal = offset.val() || 0;
let serverTime = Date.now() + offsetVal;
console.log("serverTime", serverTime);
});

关于android - Firebase 数据库的常用时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com