#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 всегда проверяйте, чтобы очистить модель данных перед повторной вставкой данных. Я обновляю свой пример кода