java - 无法在 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"
}
}
}
}
}
}
解决方案
获得一个节点的唯一方法是要么知道它的完整路径,要么知道到父节点的路径,然后知道该节点下的一些唯一值。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
推荐阅读
- c++ - 如何直接访问类的私有成员?
- sql - 如果条件,sqlite 创建值为 1 的列
- python - 矩形在显示 PyGame 上不移动
- linux - WSL:如果使用符号链接,则无法在 Windows 资源管理器中查看文件夹(显示为文件),但如果符号链接在同一目录上则有效
- .htaccess - 如何在 htaccess 中将 url index.html 重写为 /home
- java - 如何将 Edn 字符串转换为 Json
- python - 如果安装的模块不正确,如何导入模块?
- amazon-web-services - AWS API Gateway 密钥问题
- regex - 选择周期但不选择带小数点的元素
- flutter - 如何在 Flutter 中保存 TextFormField 中的 int 数据