首页 > 解决方案 > 无法在 android 中获取对我自动生成的推送 ID 的引用

问题描述

我正在通过java语言的android studio制作一个android应用程序。我已将其链接到 firebase 实时数据库。有自动生成的推送 ID 作为最后一个孩子。我想在活动中检索我的数据库值。我在引用推送 ID 时遇到问题。

这是我尝试过的。

 myRef = myfire.getReference().child("Data").child(strUID).child("Traffic").child("Wedding");
        final String uid =myRef.getKey();
        myRef.child(uid).addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.getValue() == null) {
                    Toast.makeText(getApplicationContext(),"Data Not Available",Toast.LENGTH_LONG).show();
                } else {


                    String stData1 = (Objects.requireNonNull(dataSnapshot.child("stData1").getValue())).toString();
                    String stData2 = (Objects.requireNonNull(dataSnapshot.child("stData2").getValue())).toString();
                    String stData3 = (Objects.requireNonNull(dataSnapshot.child("stData3").getValue())).toString();
                    String stData4 = (Objects.requireNonNull(dataSnapshot.child("stData4").getValue())).toString();


                    category basic = new category(stData1,stData2,stData3,stData4);
                    tvBalance.setText(stData4);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }



        });

请提供一个实际的例子。

编辑 这是我的数据库结构:------------

Data>>
      user id>>>>
              Traffic>>>>

                   Wedding>>>>
                          Auto ID>>>
                                >stData1
                                >stData2
                                >stData3
                                >stData4 //I want to get this last value//

我的 json 文件

{
  "Data" : {
    "UyhzVqsz1BVFKoePa2NEmlPFu382" : {
      "Traffic" : {
        "Wedding" : {
          "-MYKeSN8GZ8WbI-8TfVB" : {
            "stData1" : "15 Apr 2021,06:43:00:pm",
            "stData2" : "Wedding",
            "stData3" : "kkk",
            "stData4" : "100"
          }
        }
      }
    }
  }
}

标签: javaandroidfirebase-realtime-database

解决方案


获得一个节点的唯一方法是要么知道它的完整路径,要么知道到父节点的路径,然后知道该节点下的一些唯一值。JSON 中的 似乎都不是这种情况stData4,因此您必须加载整个Wedding节点,然后循环遍历结果以获得所需的部分。

不过这还不错:

myRef = myfire.getReference("Data").child(strUID).child("Traffic/Wedding");
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (!dataSnapshot.exists()) {
            Toast.makeText(getApplicationContext(),"Data Not Available",Toast.LENGTH_LONG).show();
        } else {
            for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                String stData1 = childSnapshot.child("stData1").getValue(String.class);
                String stData2 = childSnapshot.child("stData2").getValue(String.class);
                String stData3 = childSnapshot.child("stData3").getValue(String.class);
                String stData4 = childSnapshot.child("stData4").getValue(String.class);
            }

            category basic = new category(stData1,stData2,stData3,stData4);
            tvBalance.setText(stData4);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {

    }
});

上面的代码假设:

  • strUID有价值UyhzVqsz1BVFKoePa2NEmlPFu382

推荐阅读