enter image description here enter image description here我正在尝试检索聊天应用程序中用户未阅读的消息数。为此,我将值存储在两个不同的表中。首先是“聊天”,另一个是“消息”。我在Firebase的“聊天”表中存储了两个值,其中包含看到的值和时间戳,每当一个用户向另一位用户发送消息时,它会将这些值存储在“聊天”表和“消息”表中。消息表存储值-发件人,消息,可见,时间(这是一个时间戳)和类型。问题是,当我在firebase上的查询下运行时,我希望它返回所有时间戳比“聊天”表中存储的时间戳值大/大的消息。
DatabaseReference chatdatabase = FirebaseDatabase.getInstance()
.getReference().child("Chat").child(mCurrent_user_id).child(list_user_id);
chatdatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
timelast = ((long) dataSnapshot.child("timestamp").getValue());
//timestamp is the value in chat table which i use to compare
DatabaseReference mMsgDatabase =
FirebaseDatabase.getInstance().getReference().child("messages")
.child(mCurrent_user_id).child(list_user_id);
Query querymsg =mMsgDatabase.orderByChild("time").startAt(timelast);
// here i am retrieving a datasnapshot from Message table
querymsg.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
if (dataSnapshot.exists()){
for (DataSnapshot snapshot : dataSnapshot.getChildren())
{
long i = snapshot.getChildrenCount();
-- dislay number --
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我期望查询在比较时间戳之后返回我的消息。我困惑为什么查询即使在我发送一条消息时仍返回一个数字,当发送一条消息时它应该返回1。我在这里有一个问题,对于查询是否可以向我返回值,startat(timestamp)中的值可能存在于另一个表中。或者我的代码有问题。
数据结构
## Heading ##"Chat" : {
"7LVfrVRwZGb7HUcMNKkFxEJrAW52" : {
"CNFnKyQdNbbwZd8FgFw6tp7WWXR2" : {
"seen" : false,
"timestamp" : 1548689212846
}
},
"CNFnKyQdNbbwZd8FgFw6tp7WWXR2" : {
"7LVfrVRwZGb7HUcMNKkFxEJrAW52" : {
"seen" : true,
"timestamp" : 1548689212844
}
}
"messages" : {
"7LVfrVRwZGb7HUcMNKkFxEJrAW52" : {
"CNFnKyQdNbbwZd8FgFw6tp7WWXR2" : {
"-LXJNEV30kuj8CazMSt3" : {
"from" : "CNFnKyQdNbbwZd8FgFw6tp7WWXR2",
"message" : "hi there",
"seen" : false,
"time" : 1548677610585,
"type" : "text"
},