如何阅读Firebase数据库中的热门记录?

时间:2017-02-21 16:02:59

标签: android firebase firebase-realtime-database

我想获取数据库消息部分的最高记录,检查电子邮件值是否与用户电子邮件不匹配。如果是,则重复下一个记录。但如果它不匹配,我希望它用我的'消息值'填充我的应用程序中的textview,然后从数据库中删除该记录。

以下是我写入数据库代码的示例:

 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

1 个答案:

答案 0 :(得分:1)

FirebaseDatabase database = FirebaseDatabase.getInstance().getReference();
Query mQuery = database.child("messages").limitToLast(1);

修改

您似乎正在尝试从聊天应用加载消息。如果是这种情况,我建议您添加ChildEventListener而不是ValueEventListener,主要原因ChildEventListener将仅返回新添加的消息,其中ValueEventListenerChildEventListener每次添加新消息时,都将返回新添加的消息和整个数据库快照。在效率和数据使用,等待时间等方面,这将是非常昂贵的。

根据您上面给我的内容,您可以实现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); } } 以避免内存泄漏。

x <- data.frame(c(1:5),c(0))
colnames(x) <- c("val1", "val2")

foo <- function() {
  for(i in 1:length(x[,1])) {
    bar(i)
  }
  print(x)
}

bar <- function(i) {
   if(x[i,2] == 0) {
    x[i,2] <- 1
    print(x[i,])
  }
  return(x)
}

>foo()
  val1 val2
1    1    1
  val1 val2
2    2    1
  val1 val2
3    3    1
  val1 val2
4    4    1
  val1 val2
5    5    1
  val1 val2
1    1    0
2    2    0
3    3    0
4    4    0
5    5    0