在Firebase-Android中检索嵌套数据
我刚刚进入firebase和android的世界。我按照在线教程设置和获取非嵌套数据,并在listview中显示这些数据,如下所示: 数据之前: 访问整个数据并添加到我的ListView时,我应该做什么?还是我的数据结构不正确在Firebase-Android中检索嵌套数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我刚刚进入firebase和android的世界。我按照在线教程设置和获取非嵌套数据,并在listview中显示这些数据,如下所示: 数据之前: 访问整个数据并添加到我的ListView时,我应该做什么?还是我的数据结构不正确 提前谢谢 尝试如下更改firebase代码: myRef = database.getReference().child("Student1").child("Grades"); myRef.addChildEventListener(new ChildEventLis
提前谢谢 尝试如下更改firebase代码:
myRef = database.getReference().child("Student1").child("Grades");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.exists()) {
String value = dataSnapshot.getValue(String.class);
String key = dataSnapshot.getKey();
String totl = key + ": " + value;
mStudents.add(totl);
arrayAdapter.notifyDataSetChanged();
}
}
});
更新
要访问整个节点Student1
,可以通过以下方式执行:
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Student student = dataSnapshot.getValue(Student.class);
Log.d("TAG","name: "+student.getName());
Log.d("TAG","percentile: "+student.getPercentile());
Iterator it = student.getGrades().entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
Log.d("TAG","grade: "+pair.getKey() + " = " + pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
myRef = database.getReference().child("Student1");
myRef.addListenerForSingleValueEvent(valueEventListener);
首先,我已将您的类
字段重命名为课程
,因为类
可能会产生混乱和问题(Android本身使用它)。因此,使用表示数据的普通对象创建一个Java文件Student.Java
:
public class Student {
private String Course;
private String Name;
private String Percentile;
private HashMap<String,String> Grades;
public Student() {
}
public Student(String course, String name, String percentile, HashMap<String, String> grades) {
Course = course;
Name = name;
Percentile = percentile;
Grades = grades;
}
public String getCourse() {
return Course;
}
public String getName() {
return Name;
}
public String getPercentile() {
return Percentile;
}
public HashMap<String, String> getGrades() {
return Grades;
}
}
尝试按以下方式更改firebase代码:
myRef = database.getReference().child("Student1").child("Grades");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.exists()) {
String value = dataSnapshot.getValue(String.class);
String key = dataSnapshot.getKey();
String totl = key + ": " + value;
mStudents.add(totl);
arrayAdapter.notifyDataSetChanged();
}
}
});
更新
要访问整个节点Student1
,可以通过以下方式执行:
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Student student = dataSnapshot.getValue(Student.class);
Log.d("TAG","name: "+student.getName());
Log.d("TAG","percentile: "+student.getPercentile());
Iterator it = student.getGrades().entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
Log.d("TAG","grade: "+pair.getKey() + " = " + pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
myRef = database.getReference().child("Student1");
myRef.addListenerForSingleValueEvent(valueEventListener);
首先,我已将您的类
字段重命名为课程
,因为类
可能会产生混乱和问题(Android本身使用它)。因此,使用表示数据的普通对象创建一个Java文件Student.Java
:
public class Student {
private String Course;
private String Name;
private String Percentile;
private HashMap<String,String> Grades;
public Student() {
}
public Student(String course, String name, String percentile, HashMap<String, String> grades) {
Course = course;
Name = name;
Percentile = percentile;
Grades = grades;
}
public String getCourse() {
return Course;
}
public String getName() {
return Name;
}
public String getPercentile() {
return Percentile;
}
public HashMap<String, String> getGrades() {
return Grades;
}
}
这只允许我访问grades字段中的数据。我想访问整个Student1数据进行显示。姓名、班级、百分位数以及成绩。我如何才能做到这一点?addListenerForSingleValueEvent(valueEventListener)和addChildEventListener(childEventListener)之间有什么区别?
addListenerForSingleValueEvent
触发一次,然后不再触发:内部的ValueEventListener
用于读取和侦听对路径整个内容的更改addChildEventListener
将ChildEventListener
附加到位置:内部的ChildEventListener
用于接收有关给定数据库引用的子位置中的更改的事件。你可以在这里阅读更多:这里:@ValentinoS。我正试图解决一个类似的问题,我得到一个数据库异常。请检查我的帖子@这只允许我访问成绩字段内的数据。我想访问整个Student1数据进行显示。姓名、班级、百分位数以及成绩。我如何才能做到这一点?addListenerForSingleValueEvent(valueEventListener)和addChildEventListener(childEventListener)之间有什么区别?addListenerForSingleValueEvent
触发一次,然后不再触发:内部的ValueEventListener
用于读取和侦听对路径整个内容的更改addChildEventListener
将ChildEventListener
附加到位置:内部的ChildEventListener
用于接收有关给定数据库引用的子位置中的更改的事件。你可以在这里阅读更多:这里:@ValentinoS。我正在尝试解决一个类似的问题,我得到一个数据库异常。请检查我的帖子@your query here your query here your query here