В нашем приложении мы должны получить имена дневников текущего пользователя и отобразить их в виде ListView.
Мы ссылались на ряд вопросов, похожих на наш, но ни один из них не пригодился. Любая помощь будет оценена по достоинству. Заранее спасибо!
В структуре Firebase, показанной на изображении:
У пользователя может быть любое количество дневников (скажем, у пользователя на этом рисунке 3 дневника). дневники, а именно Хайдарабад, Дубай и Торонто
Под каждым дневником есть изображения вместе с опытом Пользователь.
Цель состоит в том, чтобы получить только имена дневников рассматриваемого пользователя.
Под каждым из этих дневников есть изображения (мы можем извлечь изображения в listview ; отдельное отображается во фрагменте)
Ожидаемый результат - новый ListView, который должен быть заполнен именами дневников - Хайдарабад, Ченнаи и Бангалор изображение.
я добавил скриншот
Пожалуйста, добавьте более подробный, включая содержимое ваших узлов Dubai, Toronto и т. д., и укажите, какие именно данные вы хотите получить.
Да. Вот обновленный.
И вы хотите получить все изображения пользователя в одном месте (Дубай) или во всех местах?
Не изображения. Просто названия всех дневников под пользователем
В пределах одного города (Дубай) или во всех городах?
только названия Дубай, Хайдарабад и т. д. Как получить эти имена?
Какой из следующие имена вы хотите получить, выделенный красным или зеленым?
те что выделены красным
Пожалуйста, посмотрите мой ответ ниже и скажите мне, работает ли он.




Согласно вашему последнему комментарию, чтобы получить все названия городов в ListView, используйте следующие строки кода:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("image").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> cities = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String cityName = ds.getKey();
cities.add(cityName);
}
ListView listView = (ListView) findViewById(R.id.list_view);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, cities);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
Результатом в вашем ListView будет:
Dubai
Hyderabad
Toronto
Это работает! Большое спасибо!
Теперь я попытался использовать собственный класс и собственный адаптер (чтобы имена дневников отображались в списке вместе с фотографией дневника). Но приложение вылетает
Это звучит как еще одна проблема, на которую в принципе нельзя ответить в комментарии. Чтобы следовать правилам этого сообщества, задайте еще один свежий вопрос, чтобы я и другие разработчики Firebase могли вам помочь.
Вместо описания того, как выглядит ваша база данных, добавьте файл JSON или хотя бы скриншот. Пожалуйста, покажите нам, что вы уже пробовали.