我正在尝试获取我的消息节点的最后一个 ID,但它没有获取最后一个。比如我最后一个id是12,但是它总是返回item 10的id。我的代码是这样的:
final Query query = firebase.orderByChild("messageId").limitToLast(1);
query.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("MessagesFrag","snapshot: "+dataSnapshot.getValue()+"");
}
public void onCancelled(FirebaseError firebaseError) {}
});
它返回这样的东西:
{10={chatId=6, time=Wed Apr 13 22:20:43 EDT 2016, message=hi, user=123, messageId=10}}
它应该返回:
{12={chatId=6, time=Wed Apr 13 22:29:02 EDT 2016, message=I am fine, user=1234, messageId=12}}
我的数据是这样的:
messages
9:
chatId: "6"
message: "hi"
messageId: "9"
time: "Wed Apr 13 22:29:02 EDT 2016"
user: "123"
10:
chatId: "6"
message: "hello"
messageId: "10"
time: "Wed Apr 13 22:29:02 EDT 2016"
user: "1234"
11:
chatId: "6"
message: "how are you?"
messageId: "11"
time: "Wed Apr 13 22:29:02 EDT 2016"
user: "123"
12:
chatId: "6"
message: "I am fine"
messageId: "12"
time: "Wed Apr 13 22:29:02 EDT 2016"
user: "1234"
除此之外,当我将“LimitToLast”更改为“LimitToFirst”(应该得到第一个)时,它没有得到我拥有的第一个元素(节点 1),它也得到了节点 10。
有谁知道可能是什么问题?
最佳答案
我认为问题出在 orderByChild
,因为消息是以数字方式排序的,不需要再次排序。试试这个:
FirebaseDatabase database = FirebaseDatabase.getInstance();
// change this to your databae ref
final DatabaseReference messages = database
.getReference("XXXX")
.child("XXXX"); // change this to your databae ref
messages .limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// access last message
DataSnapshot messageSnapShot= dataSnapshot.getChildren().iterator().next();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
关于android - Firebase 获取最后一个 ID - limitToLast 不工作 - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612989/