在进入问题之前,这里是有问题的数据库结构
因此,我正在尝试阅读子KkOz7Zg9iNqms1vZJA6
下的所有可用数据。我现在面临的问题是阅读孩子-KkOz7Zg9iNqms1vZJA6 / articleTags
内的价值观。我尝试使用以下代码
List<ModelContentTag> TagList_Chosen;
FirebaseDatabase.getInstance().getReference()
.child("articles")
.child("content")
.child("ta")
.child("all")
.child("KkOz7Zg9iNqms1vZJA6")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
TagList_Chosen = new ArrayList<>();
int b = 0;
for (DataSnapshot tagNameSnapshot : dataSnapshot.getChildren()) {
String TagName_Chosen = tagNameSnapshot
.child("articleTags")
.child(String.valueOf(b))
.getValue(String.class);
TagList_Chosen.add(new ModelContentTag(TagName_Chosen));
Toast.makeText(getActivity(), TagName_Chosen, Toast.LENGTH_SHORT).show();
b++;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {/*Do Nothing*/}
});
由于Key值只是"0", "1", "2", "3"
等等,我尝试使用Integer b
,它在For循环的每次迭代中递增。
列表tagList_Chosen
甚至字符串TagName_Chosen
始终返回空。有人能指出我的代码中的问题吗?我哪里错了?
由于
答案 0 :(得分:1)
尝试这样,
在OnDataChange内部使用迭代器,
Iterator<DataSnapshot> dataSnapshotsChat = dataSnapshot.child("articleTags").getChildren().iterator();
while (dataSnapshotsChat.hasNext()) {
DataSnapshot dataSnapshotChild = dataSnapshotsChat.next();
String TagName_Chosen = dataSnapshotChild.getValue(String.class); // check here whether you are getting the TagName_Chosen
}
答案 1 :(得分:0)
请使用此代码:
FirebaseDatabase.getInstance().getReference()
.child("articles")
.child("content")
.child("ta")
.child("all")
.child("KkOz7Zg9iNqms1vZJA6")
.child("articleTags")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
String firstValue = (String) map.get("0");
String secondValue = (String) map.get("1");
String thirdValue = (String) map.get("2");
}
@Override
public void onCancelled(DatabaseError databaseError) {/*Do Nothing*/}
});
希望它有所帮助。