Вы пытаетесь прочитать значение String
под List
. Но прямо под List
нет строкового значения, а есть список объектов под ним. Чтобы получить фактические значения, вам нужно будет перемещаться по структуре JSON в вашем коде.
Что-то вроде:
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("List").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot tierSnapshot: dataSnapshot.getChildren()) {
Log.d(TAG, tierSnapshot.getKey(); // "Tier 1", "Tier 1 B"
for (DataSnapshot secondSnapshot: tierSnapshot.getChildren()) {
Log.d(TAG, secondSnapshot.getKey(); // "Tier 2", "Tier 2 B"
String str = secondSnapshot.getValue(String.class);
Log.d(TAG, str); // null, "2 B"
Long num = secondSnapshot.getValue(long.class);
Log.d(TAG, num); // 2, null
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.w(TAG, "Error", databaseError);
}
});
Также следует отметить, что ваши значения равны другой тип: первый - это число 2
, а второй - строка "2 B"
. Отсюда два вызова getValue()
, чтобы получить оттуда конкретный тип c. Вы также можете просто сделать secondSnapshot.getValue()
и обработать полученный объект, как обычно (например, позвонить ему toString()
).