如何在列表中添加集合中的所有文档ID

时间:2020-06-30 06:51:56

标签: java android firebase google-cloud-firestore

我正在尝试在列表调用列表中添加来自“任务”集合的所有文档ID。没有错误信息,但列表一直为空。为了尝试查找错误,无论是未连接到Firebase还是存在其他错误,我添加了一条祝词,以查看此错误,并表明该for循环正在运行,并且正在检索数据,但列表仍然为空。我可以向您保证,适配器或回收站视图没有任何问题。我能够写到firebase。这是我的代码

CollectionReference collectionReference = db.collection("Tasks");
collectionReference
    //.whereEqualTo("capital", true)
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {

            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    String s = document.getId();
                    list.add(s);
                    Toast.makeText(TaskList.this, document.getId(), Toast.LENGTH_SHORT).show();
                }

            } else {

            }
        }
    });

mAdapter = new MyAdapter(list,this);
recyclerView.setAdapter(mAdapter);

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

Firebase发送异步调用。 Android没有诸如await之类的内置功能。因此,您必须在呼叫成功消息中设置数据。如果您尝试在通话之外读取数据,将无法正常工作。

CollectionReference collectionReference = db.collection("Tasks");
collectionReference
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    String s = document.getId();
                    list.add(s);
                    Toast.makeText(TaskList.this, document.getId(),Toast.LENGTH_SHORT).show();
                }
                
            mAdapter = new MyAdapter(list,this);
            recyclerView.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
            } else {
            }
        }
    });

答案 1 :(得分:0)

我认为您可以轻松地将Lambda表达式用于您要寻找的目的,例如,您可以执行以下操作:

List<String> MovieNameList = new ArrayList<>();

List<MovieDTO> movieDTOList = new ArrayList<>();
movieDTOList = getSearchResultFromAPI(searchPhrase);

MovieNameList = movieDTOList.stream()  
                    .filter(x -> x.getName().contains(searchPhrase))
                    .map(MovieDTO::getName)  // == .map(x -> x.getName)
                    .collect(Collectors.toList());

希望对您有帮助!