我正在按照this教程来填充Firestore中的数组中的列表。但是我收到错误,foreach不适用于类型“ DataSnapshot”
我完全按照教程进行操作,不确定是什么原因导致此错误。
这是我所拥有的:
private void readData(final MyCallback callback){
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()){
String group = document.getString("following");
followingList.add(group);
}
callback.onCallback(followingList);
} else {
}
}
});
}
private interface MyCallback {
void onCallback(List<String> list);
}
我应该能够从此方法填充列表,但它不会编译错误:
error: for-each not applicable to expression type
required: array or java.lang.Iterable
found: DocumentSnapshot
答案 0 :(得分:1)
task.getResult()
将返回DocumentSnapshot类型的对象,该对象上没有符合Iterable接口的foreach方法。如果您仅要获取单个文档,则不会有多个文档要进行迭代。只需删除for循环并直接访问文档的字段即可:
DocumentSnapshot document = task.getResult();
String group = document.getString("following");
followingList.add(group);
仅当您执行的查询可能返回多个文档时才需要迭代文档,而您在这里没有这样做。 get()
最多只返回一个文档。
答案 1 :(得分:1)
根据https://firebase.google.com/docs/firestore/query-data/get-data,您可以使用QuerySnapshot
nms <- names(data)[-1]
data <- data[order(data$teamID),]
data[paste0("partner_",nms)] <- data[seq_len(nrow(data)) + c(1,-1), nms]
data
# teamID quiz.1.answer quiz.1.solution quiz.2.answer quiz.2.solution
#1 1 2 2 4 4
#2 1 3 2 1 4
# partner_quiz.1.answer partner_quiz.1.solution partner_quiz.2.answer
#1 3 2 1
#2 2 2 4
# partner_quiz.2.solution
#1 4
#2 4
答案 2 :(得分:0)
我想您的任务尚未完成。在Android Developer Doc中,它描述了:
NSConnection
因此,如您所见,该异常不能使用for-each。