【问题标题】:Android Firebase obtaining the last push key in a databaseAndroid Firebase 获取数据库中的最后一个按键
【发布时间】:2018-08-21 23:50:39
【问题描述】:

我目前正在使用Firebase 开发一个聊天应用程序,并正在寻求帮助或澄清。所以我的Database 结构如下。在ChatID 节点下是随机的push IDs,每个都包含一些每次发送消息时都会生成的信息。是否可以自动获取最后一个push ID,以便我只能获取存储在该按键中的信息?我见过使用orderbykey,但不确定这是否可行。

数据库结构

Chat
 -ChatID
    -LIYv8kWHEZ7udgM048U
    -LIYv9t5jNmR8RXPht-p
    -LIYxzbhbfkItT3FAsWB
       createdByUser: "T3Wb0pHSfCTaIA2ofQSxc915wK83"
       text: "Hey"
       timestamp: "Aug 19"
    -LIaJaAGG-jwD0i_bAqL
       createdByUser: "T3Wb0pHSfCTaIA2ofQSxc915wK83"
       text: "Yoooo"
       timestamp: "Aug 20"

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您可以执行以下操作

        chatRef.orderByChild("ChatID").limitToLast(1).addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
        String key  = dataSnapshot.getKey();
      }
    
      @Override
      public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + databaseError.getCode());
      }
    });
    

    在哪里chatRef

    DatabaseReference mDatabase,chatRef;
    mDatabase = FirebaseDatabase.getInstance().getReference();
    chatRef = mDatabase.child("Chat");
    

    【讨论】:

    • 也许更多databaseReference.child("Chat/"+ ChatID).limitToLast(1) ?
    • 是的,如果 databaseReference = FirebaseDatabase.getInstance().getReference(); Julien的代码是一样的。
    • 我希望chatRef.child("ChatID").orderByKey.limitToLast(1)
    • @gaston 我跟着你做了,似乎没有用。出于某种原因,我的键值等于“聊天”。当我删除 orderbychild 时,我的键值就是我的“chatid”。无法获取推送 ID,因此我可以获取数据库中最后一个的时间戳
    • 是的,我已经尝试了所有发布的答案,每次它只是给我我已经拥有的聊天 ID,而不是聊天 ID 中的按键。我只是这样尝试,databaseReference.child("Chat/"+ ChatID).limitToLast(1)...我的key最终= ChatID。
    【解决方案2】:

    我可以用这个来解决

        final DatabaseReference ChatDB = mDatabaseChat.child("ChatID");
        final Query lastQuery = ChatDB.orderByKey().limitToLast(1);
        ChatDB.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                  lastQuery.addValueEventListener(new ValueEventListener() {
                       @Override
                       public void onDataChange(DataSnapshot dataSnapshot) {
                           for(DataSnapshot child: dataSnapshot.getChildren()){
                               String key = child.child("text").getValue().toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多