如何阅读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); 

它添加到像这样的数据的基础上...

enter image description here

我希望它选择顶部值无论它可能是,而不必参考具体ygmailcom100

+0

您可以请[edit]您的问题,而不是像下面的代码评论? –

+0

好的,对不起,新的 –

+0

这很好。只是很难阅读您的代码注释,以了解您想要询问的有关 –

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); 
} 
} 
+0

当我使用它时,它将返回关键'消息'中的所有值,我只需要1(任意一个)。 –

+0

请检查更新的答案,并让我知道。谢谢 –

+0

你将不得不原谅我我是firebase的新手。这是我输入的内容: –