我无法获得firebase数据库的密钥

时间:2017-05-23 13:19:14

标签: android firebase firebase-realtime-database

在我的解决方案中,我从Windows表单应用程序中保存数据。没有问题。我可以在我的Android应用程序中列出它们。在这一点上,我试图获得更新数据的关键值,但总是得到null。

my firebase database

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myReference = database.getReference();

    Query myTopPostsQuery = myReference.child("DURUSLAR").orderByChild("kayitid").equalTo("1298843637");
    myTopPostsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren())
            {
                //Childadi =postSnapshot.getKey().toString();
                String anahtar=postSnapshot.getKey().toString();
                Toast.makeText(getApplicationContext(),anahtar,Toast.LENGTH_LONG);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

当您在Firebase数据库中的某个位置执行查询时,它将搜索您在该位置下的每个子项中订购/过滤的属性。由于您在/DURUSLAR中进行查询,因此Firebase会查找/DURUSLAR/{something}/kayitid。这样的属性存在,因为您只有/DURUSLAR/{something}/{pushid}/kayitid

要解决此问题,您有两种选择:

  1. 较低级别的查询
  2. 查询属性(固定)路径
  3. 第一个选项是在树的较低级别创建查询:

    Query myTopPostsQuery = myReference.child("DURUSLAR/K6").orderByChild("kayitid").equalTo("1298843637");
    

    现在查询正在寻找/DURUSLAR/{pushid}/kayitid,它会起作用。

    第二个选项是查询属性的已知路径:

    Query myTopPostsQuery = myReference.child("DURUSLAR").orderByChild("K6/-KknsAR4_KFAeZ1HVXPW/kayitid").equalTo("1298843637");
    

    这似乎不太可能你想要这个,但这种方法在其他情况下可能会有所帮助。通常,当您需要在路径中使用推送ID的此方法时,您将要查看{{3}}。

答案 1 :(得分:0)

您获得null的原因是您在错误的数据级别上执行orderByChild。根据您的数据,您需要有一个孩子K4-> which has a unique_id_push_id -> kayitid。因此,您需要遍历K4才能获得密钥kayitid的1298843637。您可以按照this教程了解检索来自firebase的数据。

 Query myTopPostsQuery = myReference.child("DURUSLAR").child("k6").orderByChild("kayitid").equalTo("1298843637");
    myTopPostsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren())
            {
                //Childadi =postSnapshot.getKey().toString();
                String anahtar=postSnapshot.getKey().toString();
                Toast.makeText(getApplicationContext(),anahtar,Toast.LENGTH_LONG);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });