foreach不适用于类型的错误对DocumentSnapshot类型意味着什么?

时间:2019-07-02 01:51:30

标签: java android google-cloud-firestore

我正在按照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

3 个答案:

答案 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。