Как получить весь список детей от Firebase android

Мне нужен все дочерний список из Firebase в android.

Я реализую этот код, но его не работает.

mFirebaseRef = new Firebase(FIREBASE_URL); mFirebaseRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { List<String> td = (ArrayList<String>) dataSnapshot.getValue(); //notifyDataSetChanged(); } @Override public void onCancelled(FirebaseError firebaseError) { } }); 

Solutions Collecting From Web of "Как получить весь список детей от Firebase android"

Надеюсь, что ниже работает код

 Firebase ref = new Firebase(FIREBASE_URL); ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { Log.e("Count " ,""+snapshot.getChildrenCount()); for (DataSnapshot postSnapshot: snapshot.getChildren()) { <YourClass> post = postSnapshot.getValue(<YourClass>.class); Log.e("Get Data", post.<YourMethod>()); } } @Override public void onCancelled(FirebaseError firebaseError) { Log.e("The read failed: " ,firebaseError.getMessage()); } }); 

Firebase хранит последовательность значений в этом формате:

 "-K-Y_Rhyxy9kfzIWw7Jq": "Value 1" "-K-Y_RqDV_zbNLPJYnOA": "Value 2" "-K-Y_SBoKvx6gAabUPDK": "Value 3" 

Если это у вас есть, вы получаете неправильный тип. Вышеупомянутая структура представлена ​​как Map , а не как List :

 mFirebaseRef = new Firebase(FIREBASE_URL); mFirebaseRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Map<String, Object> td = (HashMap<String,Object>) dataSnapshot.getValue(); List<Object> values = td.values(); //notifyDataSetChanged(); } @Override public void onCancelled(FirebaseError firebaseError) { } }); 
 FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance(); DatabaseReference databaseReference = mFirebaseDatabase.getReference(FIREBASE_URL); databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) { Log.v(TAG,""+ childDataSnapshot.getKey()); //displays the key for the node Log.v(TAG,""+ childDataSnapshot.child(--ENTER THE KEY NAME eg. firstname or email etc.--).getValue()); //gives the value for given keyname } } @Override public void onCancelled(DatabaseError databaseError) { } }); 

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

Я сделал что-то вроде этого:

 Firebase ref = new Firebase(FIREBASE_URL); ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { Map<String, Object> objectMap = (HashMap<String, Object>) dataSnapshot.getValue(); List<Match> = new ArrayList<Match>(); for (Object obj : objectMap.values()) { if (obj instanceof Map) { Map<String, Object> mapObj = (Map<String, Object>) obj; Match match = new Match(); match.setSport((String) mapObj.get(Constants.SPORT)); match.setPlayingWith((String) mapObj.get(Constants.PLAYER)); list.add(match); } } } @Override public void onCancelled(FirebaseError firebaseError) { } }); 

Сохранение и восстановление данных – с Firebase (устаревшая версия 2.4.2)

 Firebase fb_parent = new Firebase("YOUR-FIREBASE-URL/"); Firebase fb_to_read = fb_parent.child("students/names"); Firebase fb_put_child = fb_to_read.push(); // REMEMBER THIS FOR PUSH METHOD //INSERT DATA TO STUDENT - NAMES I Use Push Method fb_put_child.setValue("Zacharia"); //OR fb_put_child.setValue(YOUR MODEL) fb_put_child.setValue("Joseph"); //OR fb_put_child.setValue(YOUR MODEL) fb_put_child.setValue("bla blaaa"); //OR fb_put_child.setValue(YOUR MODEL) //GET DATA FROM FIREBASE INTO ARRAYLIST fb_to_read.addValuesEventListener....{ public void onDataChange(DataSnapshot result){ List<String> lst = new ArrayList<String>(); // Result will be holded Here for(DataSnapshot dsp : result.getChildren()){ lst.add(String.valueOf(dsp.getKey())); //add result into array list } //NOW YOU HAVE ARRAYLIST WHICH HOLD RESULTS for(String data:lst){ Toast.make(context,data,Toast.LONG_LENGTH).show; } } } 

Как сказал Фрэнк, Firebase хранит последовательность значений в формате "key": "Value" которое представляет собой структуру карты

Чтобы получить List из этой последовательности, вам нужно

  1. Инициализируйте GenericTypeIndicator с помощью HashMap строки и вашего объекта .
  2. Получить значение DataSnapShot как GenericTypeIndicator в Map .
  3. Инициализируйте ArrayList значениями HashMap .

 GenericTypeIndicator<HashMap<String, Object>> objectsGTypeInd = new GenericTypeIndicator<HashMap<String, Object>>() {}; Map<String, Object> objectHashMap = dataSnapShot.getValue(objectsGTypeInd); ArrayList<Object> objectArrayList = new ArrayList<Object>(objectHashMap.values()); 

Прекрасно работает для меня, надеюсь, это поможет.

В моем случае только данное решение работало нормально.

Скриншот структуры Firebase ArrayList :

Введите описание изображения здесь

Как получить весь список из Firebase из DataSnapshot .

 GenericTypeIndicator<Map<String, List<Education>>> genericTypeIndicator = new GenericTypeIndicator<Map<String, List<Education>>>() {}; Map<String, List<Education>> hashMap = dataSnapshot.getValue(genericTypeIndicator); for (Map.Entry<String,List<Education>> entry : hashMap.entrySet()) { List<Education> educations = entry.getValue(); for (Education education: educations){ Log.i(TAG, education.Degree); } } 

Education.java: (Модельный класс).

 public class Education implements Serializable{ public String Degree; public String Result; } 

Надеюсь, все будет хорошо.