Android 我能';无法获取firebase数据库的密钥

Android 我能';无法获取firebase数据库的密钥,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在我的解决方案中,我保存来自Windows窗体应用程序的数据。没问题。我可以在我的android应用程序中列出它们。在这一点上,我试图获取键值来更新数据,但总是得到null FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myReference = database.getReference(); Query myTopPostsQuery = myReferen

在我的解决方案中,我保存来自Windows窗体应用程序的数据。没问题。我可以在我的android应用程序中列出它们。在这一点上,我试图获取键值来更新数据,但总是得到null

    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) {

        }
    });


您能帮助我吗?

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

要解决此问题,您有两个选项:

  • 下级查询
  • 在属性的(固定)路径上查询属性
  • 第一个选项是在树的较低级别创建查询:

    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的这种方法时,您会希望查看。

    获取null的原因是您在错误的数据级别上执行了
    orderByChild
    。根据您的数据,您需要有一个子
    K4>,该子项具有唯一的\u id\u push\u id->kayitid
    。因此,您需要遍历K4以获得键
    kayitid
    的1298843637。您可以按照教程了解从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) {
    
            }
        });
    

    谢谢你,先生。我知道我需要更多的练习。