Получение данных из базы данных Firebase в реальном времени, Android Studio, Java - PullRequest
0 голосов
/ 18 января 2019

Я ищу способ получения данных из базы данных реального времени Firebase в формате, таком как массив [] или строка.

Моя база данных выглядит так: Ссылка на изображение базы данных

Или: Database | -->Users | -->UID1 -->UID2

Это в корне базы данных Я хочу получить список всех идентификаторов UID в дочернем элементе «Пользователи». Это код, который у меня есть, и я немного застрял:

DatabaseReference databaseReference = firebaseDatabase.getReference("Users");
        databaseReference.addValueEventListener(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        String UIDs = dataSnapshot.getValue(String.class);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

Я немного новичок в том, что касается java, android studio и firebase. Я пытаюсь получить данные в формате, который я знаю, как использовать, например, String или Array [] of Strings. Я оглянулся, если другие люди, возможно, задавали тот же вопрос, но я мог получить ответы на эти вопросы на работу / не понял их. Заранее спасибо за ваше время!

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Для вашего вопроса, приведенного выше, я дам два способа: ArrayList или String с разделителями

ArrayList<String> uids = new ArrayList<String>();

FirebaseDatabase.getInstance().getReference("Users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
            uids.add(snapshot.getKey());
        }
    }
}

@Override
public void onCancelled(DatabaseError error) {

}
});

Для String

String uids = "";

FirebaseDatabase.getInstance().getReference("Users").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
                uids += snapshot.getKey() + ",";
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError error) {

    }
    });

Это дает вывод, такой как: uid1, uid2, uid3, ..... uidn,

0 голосов
/ 18 января 2019

Чтобы получить список идентификаторов, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("Users");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();
            list.add(uid);
        }

        //Do what you need to do with your list
    }

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

Я рекомендую вам использовать список только внутри обратного вызова, иначе он будет пустым. Если вы хотите использовать его вне метода onDataChange(), я рекомендую вам посмотреть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделать с помощью Пользовательский обратный звонок. Вы также можете взглянуть на это видео для лучшего понимания.

0 голосов
/ 18 января 2019

Вы можете попробовать это:

DatabaseReference ref= 
FirebaseDatabase.getInstance().getReference("Users");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        int i = 0;
        for(DataSnapshot d : dataSnapshot.getChildren()) {
            name[i] = d.getKey();
            i++;
        }
    }
}//onDataChange

@Override
public void onCancelled(DatabaseError error) {

}//onCancelled
});

name [] - это массив строк!

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