Как установить извлеченные данные в ListView в Android

#android #listview #firebase #firebase-realtime-database

# #Android #listview #firebase #firebase-база данных в реальном времени

Вопрос:

Я пытаюсь установить извлеченные данные из Firebase в ListView, но он устанавливает только последнее значение в ListView

Это мой код:

 ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child : dataSnapshot.getChildren()) {

                for (DataSnapshot single : child.getChildren()) {
                    Map<String, Object> map = (Map<String, Object>) single.getValue();

                   namerc = (String) map.get("Namerc");
                   // String image = (String) map.get("Imagerc");
                    description = (String) map.get("Description");
                    title=(String) map.get("Title");

                      if (namerc!=null amp;amp; description!=null amp;amp; title!=null) {
                          String[] title1={title};
                          String[] desc1={description};
                          String[] name1={namerc};

                          Toast.makeText(getActivity(), description, Toast.LENGTH_SHORT).show();
                          List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

                         for (int i=0;i<title1.length;i  ) {
                             HashMap<String, String> hm = new HashMap<String, String>();
                             hm.put("title", title1[i]);
                             hm.put("desc", desc1[i]);
                             hm.put("name", name1[i]);
                             aList.add(hm);
                         }
                          // Keys used in Hashmap
                          String[] from = {"title", "desc", "name"};

                          int[] to = {R.id.posttitle, R.id.postdesc, R.id.postdate};





                          //Picasso.with(getActivity()).load(image).into(image1);
                          ListView listView = (ListView) rootView.findViewById(R.id.listView);
                          SimpleAdapter adapter = new SimpleAdapter(getActivity(), aList, R.layout.layoutarray, from, to);

                          listView.setAdapter(adapter);


                      }

                }

            }

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
 

Как я могу установить все значения в listview, которые извлекаются из Firebase?

Пожалуйста, помогите мне решить эту проблему

Комментарии:

1. Вы хотите перейти из Firebase к просмотру списка?

2. да, сэр, я хочу установить данные, полученные из firebase, в listview..

3. во-первых, я не сэр, я такой же, как ты, парень из redome, который любит изучать firebase, для вашего вопроса я хотел бы дать ссылку на видео, где я учу, как получать данные из firebase и показывать в виде списка. посмотрите это видео и дайте мне знать, если это поможет, тогда я отправлю ответниже, чтобы он соответствовал stackoverflow youtube.com/watch?v=son6KAi46Qk

4. Спасибо, что поделились, это хороший учебник 🙂

5. Братан, как я могу установить данные в firebase в начало listview

Ответ №1:

не устанавливайте listview, и это модель данных внутри прослушивателя, вы должны определить listview и модель данных вне прослушивателя. например:

 List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();
ListView listView = (ListView) rootView.findViewById(R.id.listView);
// Keys used in Hashmap
String[] from = {"title", "desc", "name"};
int[] to = {R.id.posttitle, R.id.postdesc, R.id.postdate};
SimpleAdapter adapter = new SimpleAdapter(getActivity(), aList, R.layout.layoutarray, from, to);
listView.setAdapter(adapter);

ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            aList.clear();
            for (DataSnapshot child : dataSnapshot.getChildren()) {

                for (DataSnapshot single : child.getChildren()) {
                    Map<String, Object> map = (Map<String, Object>) single.getValue();

                   namerc = (String) map.get("Namerc");
                   // String image = (String) map.get("Imagerc");
                    description = (String) map.get("Description");
                    title=(String) map.get("Title");

                      if (namerc!=null amp;amp; description!=null amp;amp; title!=null) {
                          String[] title1={title};
                          String[] desc1={description};
                          String[] name1={namerc};

                          Toast.makeText(getActivity(), description, Toast.LENGTH_SHORT).show();

                         for (int i=0;i<title1.length;i  ) {
                             HashMap<String, String> hm = new HashMap<String, String>();
                             hm.put("title", title1[i]);
                             hm.put("desc", desc1[i]);
                             hm.put("name", name1[i]);
                             aList.add(hm);
                         }
                          // Keys used in Hashmap
                          String[] from = {"title", "desc", "name"};

                          int[] to = {R.id.posttitle, R.id.postdesc, R.id.postdate};
                          adapter.notifyDataSetChanged();
                      }
                }
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
 

Комментарии:

1. Сэр, это сработало, но оно повторно заполняет данные, например: — (у меня есть 4 данных в базе данных, и когда я публикую новые данные, они показывают 9 данных,4 4 1 (новые данные)

2. @ChatrapatiShiva всегда проверяйте, чтобы очистить модель данных перед повторной вставкой данных. Я обновляю свой пример кода