我正在尝试在单个文档中使用附加的图像数据结构填充Android中的RecylerView
。我想列出每个ID的每个名称,地区,图像。
必须做到这一点,不要破坏子集合。是否有任何可能的聪明方法来填充RecylerView
。谢谢
这是我正在使用的示例数据。
[![在此处输入图片描述] [1]] [1]
编辑1:
我尝试实现以下功能,是否有效?
private void setUpRecyclerView(View view) {
CheckinList = new ArrayList<>();
notebookRef.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>(){
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
user user = documentSnapshot.toObject(user.class);
HashMap<String, HashMap> about = user.getAbout();
for(Map.Entry<String, HashMap> entry : about.entrySet()) {
String key = entry.getKey();
HashMap<String, HashMap> value = entry.getValue();
String Name = "";
String District = "";
String imageUrl = "";
for (Map.Entry<String, HashMap> entry3 : value.entrySet()) {
String key3 = entry3.getKey();
if (key3 == "name"){
Name = entry3.getValue().toString();
} else if (key3 == "district"){
District = entry3.getValue().toString();
} else if (key3 == "imageurl") {
imageUrl = entry3.getValue().toString();
}
}
CheckinList.add(new Checkin(Name, District, imageUrl));
}
}
}
});
adapter = new NoteAdapter(CheckinList, mContext);
RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
recyclerView.setAdapter(adapter);
}```
full data scheme screenshot
[![enter image description here][2]][2]
[1]: https://i.stack.imgur.com/2Jspj.jpg
[2]: https://i.stack.imgur.com/iwsat.jpg
最佳答案
如果ID的数量不多,则需要使用嵌套的for循环。
如果您有权访问数据库,则应将架构更改为如下所示
Document(randomID) -> Collection (about) -> Document (IDs) = Data (name/district/image);
之后,您只需进行嵌套的Firebase查询即可访问数据。
如果您需要有关给定架构的Firebase查询的帮助,或者您想使用自己的架构并获取数据,请提供更多信息。
编辑1
不建议使用,因为这不是获取数据的最佳方法
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
firebaseFirestore
.collection("your collection")
.document("your doc).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()){
int docSize = 10; //size of IDs (assuming 10)
for (int index = 0; index <= docSize; index++){
HashMap<String, Object> dataMap = (HashMap<String, Object>) task.getResult().get("1000000"+index);
//you have data in dataMap
}
}
}
});
抱歉,不确定结果,因为我没有完整的信息,您需要修改代码。如果成功,请编辑我的答案。
仍建议更改架构
希望这会有所帮助!