我正在尝试在列表调用列表中添加来自“任务”集合的所有文档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);
任何帮助将不胜感激
答案 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());
希望对您有帮助!