Cod*_*und 2 time android firebase firebase-realtime-database
我正在为 Android 创建一个聊天应用程序。我正在使用 Firebase 实时数据库来实现此目的。这就是数据库的“chats”分支的样子:
使用用户唯一 ID(例如“513”、“675”等)生成的聊天室有唯一 ID。这些聊天室内部有消息对象,这些对象也具有唯一 ID,并且在其中存储消息发送日期、消息名称等信息。发件人以及消息的文本。Message对象的构造函数如下:
public Message(String text,String senderUID, Long date){
this.text = text;
this.senderUID = senderUID;
this.date = date;
}
Run Code Online (Sandbox Code Playgroud)
这就是我为每条消息生成时间并将其发送到 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("");
}
});
Run Code Online (Sandbox Code Playgroud)
以下是我如何使用值事件监听器从数据库获取数据:
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
从 Firebase 数据库获取数据后,我根据日期属性对它们进行排序并列出它们。一切正常,但当我填写消息的日期属性时,它会根据手机上的当地时间进行填充,因为我无法正确对消息进行排序。时间可能因设备而异。我需要使用一个对于使用我的应用程序的所有设备来说都是通用且相同的时间。但我找不到办法。
编辑:我仍然无法弄清楚,但作为快速解决方案,我在数据库中创建了一个名为序列号的对象。我向消息构造函数添加了一个名为序列号的属性。我从数据库中读取序列号,将该序列号赋予下一条消息,并为新消息增加数据库中的值。然后我根据该号码对消息进行排序。这不是最好的方法,但直到我找到更好的方法为止。
尝试这个
firebase
.database()
.ref("/.info/serverTimeOffset")
.on("value", function(offset) {
let offsetVal = offset.val() || 0;
let serverTime = Date.now() + offsetVal;
console.log("serverTime", serverTime);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |