Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase数据库按未知节点的时间排序_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebase数据库按未知节点的时间排序

Android Firebase数据库按未知节点的时间排序,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试按时间顺序检索以下内容: 其中,已知值是经过身份验证的用户的当前令牌,但未知值是以前从服务器环境创建的用户 mDatabase = FirebaseDatabase.getInstance().getReference("users"); mDatabase.child("users").child(user.getUid()); mDatabase.child(user.getUid()).addValueEventListener(new ValueE

我正在尝试按时间顺序检索以下内容:

其中,已知值是经过身份验证的用户的当前令牌,但未知值是以前从服务器环境创建的用户

    mDatabase = FirebaseDatabase.getInstance().getReference("users");

    mDatabase.child("users").child(user.getUid());

    mDatabase.child(user.getUid()).addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


            GenericTypeIndicator<Map<String, Object>> t = new GenericTypeIndicator<Map<String, Object>>() {
            };
            Map<String, Object> map = dataSnapshot.getValue(t);

            assert map != null;


            for (Object e : map.values()) {
                list.add(e.toString());
            }

            for (Object e : map.keySet()) {
                list1.add(e.toString());
            }
您将要使用orderByChild进行以下操作:

mDatabase = FirebaseDatabase.getInstance().getReference("users");

Query query = mDatabase.child(user.getUid()).orderByChild("time")

query.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (dataSnapshot childNode: dataSnapshot.getChildren()) {
      System.out.printl(childNode.getKey()); //this is the unknown key you marked
      System.out.printl(childNode.child("time").getValue(Long.class));
    }
  }

  ...

回答如下。但是既然你调用了Firebase.setAndroidContextthis;看起来您使用的是非常旧版本的Firebase SDK。考虑到最后两年的改进,1的感谢,是的,不知道为什么在那里,但认为我已经在使用最新的版本…在我的gradle:implementation'com.google.firebase:firebase database:12.0.0'+1感谢看起来不错,我从来没有在任何文档中看到过childNode.key,我在Android Studio中使用它时遇到了一个错误。。无法解析符号“键”?有什么想法吗。。。很抱歉。这应该是Android上的getKey。最近我做了太多的JavaScript。最后一件事,你能检查一下我编辑过的答案,看看我以前是如何创建hashmap的吗?我真的想把所有节点放在一个按时间排序的hashmap中,而不仅仅是时间的值。我编辑了问题以显示代码。。。感谢最重要的是使用我在dataSnapshot.getChildren上的循环。您的代码没有Map Map=dataSnapshot.getValuet,这会丢失排序信息,因为在映射中没有空间容纳它。谢谢,如果我在hashmap中丢失了排序,那么最好使用什么,如果我想检索按时间排序的未知节点中的所有值?
mDatabase = FirebaseDatabase.getInstance().getReference("users");

Query query = mDatabase.child(user.getUid()).orderByChild("time")

query.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for (dataSnapshot childNode: dataSnapshot.getChildren()) {
      System.out.printl(childNode.getKey()); //this is the unknown key you marked
      System.out.printl(childNode.child("time").getValue(Long.class));
    }
  }

  ...