如何阅读Firebase数据库中的最高记录?
我想获得我的数据库的消息部分的最高记录,检查电子邮件的值不匹配用户的电子邮件。如果确实如此,请重复下一条记录。但是,如果它不匹配,我希望它在我的应用中使用其'消息值'填充textview,然后从数据库中删除该记录。如何阅读Firebase数据库中的最高记录?
这是我写的数据库代码的例子:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//setting user info in message class
message m = new message();
m.setName(user.getDisplayName().toString());
m.setMessage(messageEdt.getText().toString());
m.setEmail(user.getEmail().toString());
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("messages").child(uniqueGeneratedMessageid);
myRef.setValue(m);
它添加到像这样的数据的基础上...
我希望它选择顶部值无论它可能是,而不必参考具体ygmailcom100
。
FirebaseDatabase database = FirebaseDatabase.getInstance().getReference();
Query mQuery = database.child("messages").limitToLast(1);
编辑:
它看起来像你正试图从一个聊天应用程序加载的消息。如果是这种情况,我建议你添加ChildEventListener
而不是ValueEventListener
,主要原因是ChildEventListener
将只返回新添加的消息,其中ValueEventListener
将返回新添加的消息和整个数据库快照,每次新增消息被添加。这将是在效率和数据的使用,等待时间方面非常昂贵等
从你给我上面,你会实现一个ChildEventListener
这样的:
private final ChildEventListener mChildEventListener;
private final Query mQuery;
private final FirebaseDatabase database;
database = FirebaseDatabase.getInstance().getReference();
mQuery = database.child("messages").limitToLast(1);
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
String value = dataSnapshot.getValue(String.class);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mQuery.addChildEventListener(childEventListener);
mChildEventListener = childEventListener;
然后在您的onDestroy
方法,你将要删除的ChildEventListener
,以避免内存泄漏。
public void onDestroy() {
super.onDestroy();
if (mChildEventListener != null) {
mQuery.removeEventListener(mChildEventListener);
}
}
当我使用它时,它将返回关键'消息'中的所有值,我只需要1(任意一个)。 –
请检查更新的答案,并让我知道。谢谢 –
你将不得不原谅我我是firebase的新手。这是我输入的内容: –
您可以请[edit]您的问题,而不是像下面的代码评论? –
好的,对不起,新的 –
这很好。只是很难阅读您的代码注释,以了解您想要询问的有关 –