Java 从Firestore中检索嵌套对象并放入Android中的RecycleView?

Java 从Firestore中检索嵌套对象并放入Android中的RecycleView?,java,android,android-recyclerview,google-cloud-firestore,stickyrecycleview,Java,Android,Android Recyclerview,Google Cloud Firestore,Stickyrecycleview,我正试图在一个文档中使用附加的图像数据结构在Android中填充一个RecylerView。我想列出每个ID的姓名、地区和图像 它需要在子集合中不分解的情况下完成。是否有任何可能的智能方法来填充RecylerView。谢谢 这是我正在使用的示例数据。 [![在此处输入图像描述][1][1] 编辑1: 我试着实现以下内容,它有效吗 private void setUpRecyclerView(View view) { CheckinList = new ArrayList<

我正试图在一个文档中使用附加的图像数据结构在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
private void setUpRecyclerView(视图){
CheckinList=newarraylist();
notebookRef.get()
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(QuerySnapshot QueryDocumentSnapshot){
用于(QueryDocumentSnapshot文档快照:QueryDocumentSnapshot){
user user=documentSnapshot.toObject(user.class);
HashMap about=user.getAbout();
for(Map.Entry:about.entrySet()){
String key=entry.getKey();
HashMap value=entry.getValue();
字符串名称=”;
字符串District=“”;
字符串imageUrl=“”;
对于(Map.Entry entry3:value.entrySet()){
字符串key3=entry3.getKey();
如果(键3==“名称”){
Name=entry3.getValue().toString();
}否则如果(键3==“地区”){
District=entry3.getValue().toString();
}else if(键3==“imageurl”){
imageUrl=entry3.getValue().toString();
}
}
添加(新签入(名称、地区、图像URL));
}
}
}
});
适配器=新的NoteAdapter(检查列表,mContext);
RecyclerView RecyclerView=view.findViewById(R.id.recycler\u视图);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(mContext));
recyclerView.setAdapter(适配器);
}```
全数据方案截图
[![在此处输入图像描述][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 不建议这样做,因为这不是获取数据的最佳方式

firebaseforestore-firebaseforestore=firebaseforestore.getInstance();
火库
.收藏(“您的收藏”)
.document(“您的文档).get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
int docSize=10;//ID的大小(假设为10)

对于(int index=0;index,如果ID的数量不多,则需要使用嵌套for循环

如果您可以访问数据库,那么应该将模式更改为如下内容

Document(randomID) -> Collection (about) -> Document (IDs) = Data (name/district/image);
在此之后,您可以简单地进行嵌套Firebase查询以访问数据

如果您需要使用我的给定模式进行Firebase查询的帮助,或者您希望使用自己的模式并获取数据,请提供更多信息

编辑1 不建议这样做,因为这不是获取数据的最佳方式

firebaseforestore-firebaseforestore=firebaseforestore.getInstance();
火库
.收藏(“您的收藏”)
.document(“您的文档).get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
int docSize=10;//ID的大小(假设为10)

对于(int index=0;index感谢回复。对于嵌套的for循环,我需要在hashmap上创建一个for循环,然后为内部hashmap创建另一个循环吗?之后,我将结果hashmap添加/转换为数组列表。最后,我将数组列表放入recyclerview适配器以填充它。我的理解正确吗?尝试之后要在Firebase中实现您的模式是不可行的,您可以更改您的Firestore结构吗?它没有遵循正确的JSON格式,您应该使用我建议的或类似于您的模式/结构库的东西。我只是想知道,我想我可以在实时数据库中做到这一点。实时数据库可以嵌套多个层。就像t room应用程序。我认为firestore中应该类似。如果我误解了这一部分,请纠正我。在实时数据库中,您不必自己创建另一个集合,但在这里您必须创建该部分。
collection(mainCollection)->Document(randomID)->collection(about)->Document(IDs)=Data(姓名/地区/图像)
这是你在firebase中必须做的事情,以获得相同的结果。这看起来可能需要一些额外的步骤,但这是为了更好。我通过制作耦合循环进行了一次尝试。它会起作用吗?参考:感谢回复。对于嵌套的for循环,我需要在hashmap上创建一个for循环,然后为内部hashmap创建另一个循环吗?战后d、 然后,我将结果hashmap添加/转换为数组列表。最后,我将数组列表放入recyclerview适配器以填充它。我的理解正确吗?在尝试在Firebase中实现模式后,这是不可行的,您可以更改Firestore结构吗?它没有遵循正确的JSON格式