Извлечь вложенный объект из Firestore и поместить в RecycleView в Android? - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь заполнить RecylerView в Android с прикрепленной структурой данных изображения в одном документе. Я хочу перечислить каждое имя, район, изображение для каждого удостоверения личности.

Это должно быть сделано без разбивки в под-коллекции. Есть ли какой-нибудь умный способ заполнить 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

1 Ответ

0 голосов
/ 09 января 2020

Вам необходимо использовать для l oop, если число ID невелико.

, если у вас есть доступ к базе данных, вы должны изменить схему на что-то подобное

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
            }
        }
    }
});

Извините, не уверен насчет результата, так как я не не иметь полной информации, вам нужно изменить код. Пожалуйста, измените мой ответ, если вы добьетесь успеха.

Все еще предлагаете изменить схему

Надеюсь, это поможет!

...