我有一个JSON数组,我存储了一些我要在应用程序主菜单上显示的项目。它看起来像这样:
我想检索此列表但由于某种原因我忽略下面的代码不起作用:
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference mMainMenuRef = mRootRef.child("main_menu");
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
mMainMenuRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String stringValue = ds.getValue(String.class);
Log.i("Firebase", stringValue);
}
}
...
});
答案 0 :(得分:1)
您在数据库中引用了/main_menu
的点:
DatabaseReference mMainMenuRef = mRootRef.child("main_menu");
然后你听这个参考并循环数据:
mMainMenuRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String stringValue = ds.getValue(String.class);
Log.i("Firebase", stringValue);
}
}
这意味着您直接在/main_menu
下遍历子节点,因此-L-FDnRW...
。然后,您尝试获取该节点的字符串值。但-L-FDnRW...
包含整个JSON对象,因此没有单个字符串值。
要在-L-FDnRW...
下获取特定媒体资源的价值,请使用DataSnapshot.child()
方法:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String stringValue = ds.child("0").getValue(String.class);
Log.i("Firebase", stringValue);
}
}
要显示所有子项的值,请遍历子快照:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
for (DataSnapshot prop : ds.getChildren()) {
String stringValue = ptop.getValue(String.class);
Log.i("Firebase", stringValue);
}
}
}
答案 1 :(得分:1)
根据您的要求,以下是您修改后的代码:
DatabaseReference mRootRef =
FirebaseDatabase.getInstance().getReference();
DatabaseReference mMainMenuRef = mRootRef.child("main_menu");
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
mMainMenuRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren())
{
for (DataSnapshot property :dataSnapshot1.getChildren()) {
String value = property.getValue(String.class);
Log.i("Firebase", value);
}
}
}
...
});