как перебирать различные значения ключа, которые генерируются случайным образом с помощью firebase - PullRequest
0 голосов
/ 05 ноября 2018

Вот структура данных, которую я хочу пройти Как вы можете видеть, у пользователей есть разные пользователи, через которых я могу легко пройти, потому что они являются идентификаторами пользователей, сгенерированными во время аутентификации в firebase, поэтому у меня есть к ним доступ, но теперь я хочу просматривать внутри узла событий, который имеет неизвестные значения ключей, так как я создаю их с помощью push. также узел обслуживания создается с помощью push и должен иметь множественное значение, как я должен перемещаться между ними

1 Ответ

0 голосов
/ 07 ноября 2018

Чтобы решить эту проблему, есть два подхода. Если вы используете для добавления данных в базу данных класс модели с именем Event, чтобы получить данные обратно, используйте следующие строки кода:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventsRef = rootRef.child("users").child(uid).child("events");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Event event = ds.getValue(Event.class);
            Log.d(TAG, event.getName());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
eventsRef.addListenerForSingleValueEvent(valueEventListener);

Второй подход заключается в использовании класса String, как показано в следующих строках кода:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventsRef = rootRef.child("users").child(uid).child("events");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            Log.d(TAG, name);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
eventsRef.addListenerForSingleValueEvent(valueEventListener);

В обоих случаях вывод в logcat будет:

Yoga Camp
Blood Donation Camp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...