【发布时间】:2019-01-28 16:58:25
【问题描述】:
我正在尝试从出勤集合和学生集合中检索其 userUID 匹配的每个学生的姓名,即如果两个用户 UID 匹配,我想从学生集合中返回与 userUID 关联的名称。我正在查询出勤表开始。
这是我的代码:
public void viewAttendance(View v) {
attendanceRef2.orderBy("sessionID", Query.Direction.ASCENDING)
.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
String data = "";
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Attendance attendance = documentSnapshot.toObject(Attendance.class);
Student studentName = documentSnapshot.toObject(Student.class);
String sessionID = attendance.getSessionID();
String studentID = attendance.getUserUID();
String attendanceUID = studentName.getUserUID();
String name;
if (studentID.equals(attendanceUID)){
name = studentName.getName();
data+= "Session ID: " + sessionID + "\n" + "Student Name: " + name + "\n\n";
}
}
textViewData.setText(data);
}
});
}
编辑代码
public void viewAttendance(View v) {
attendanceRef2.orderBy("sessionID", Query.Direction.ASCENDING)
.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
String data = "";
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Attendance attendance = documentSnapshot.toObject(Attendance.class);
Student studentName = documentSnapshot.toObject(Student.class);
String sessionID = attendance.getSessionID();
String attendanceUID = attendance.getUserUID();
String studentUID = studentName.getUserUID();
final String name = "";
if (attendanceUID.equals(studentUID)){
db.collection("Student").document("name").get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
textViewData.setText(name);
}
});
}
data+= "Session ID: " + sessionID + "\n" + "Student Name: " + name + "\n\n";
}
textViewData.setText(data);
}
});
}
【问题讨论】:
-
虽然在学生姓名中返回 null,但目前正在检索会话 ID
-
您正在从现在拥有的代码中的单个集合中加载单个文档。如果您想从不同的集合中加载学生,则必须在循环内使用另一个
get()来执行此操作,例如:db.collection("Users").document(studentID).get().addOnCompleteListener(...。 -
这是我添加您的建议的地方。它检索 sessionID 然后消失,什么都没有显示?
-
您需要一个
onSuccess,就像您喜欢的外部听众一样。然后在那个新的onSuccess中加载用户信息,从您使用Student studentName = documentSnapshot.toObject(Student.class);加载的新文档中加载 -
所以我必须在 for 循环中或在查询之前插入它
标签: android google-cloud-firestore