Как получить определенные данные от ребенка в базе данных Firebase - PullRequest
0 голосов
/ 31 октября 2018

Я новичок в базе данных Firebase, и моя структура данных в Firebase выглядит следующим образом:

Root- users-sec_a, sec_b, sec_c

В каждом разделе (sec_a, sec_b, sec_c) будут идентификаторы пользователей. в каждом разделе есть минимум 40 единиц. И во всех идентификаторах есть общие данные ребенка (имя, роллно, посещаемость,) Теперь мой вопрос был о том, что я хочу отображать только имена и имена всех идентификаторов, присутствующих в одном из разделов (отображаемый раздел был введен пользователем).

Как я могу получить эти данные?

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Вы можете получить вложенные данные с помощью дочернего метода базы данных Fire.

Для вашей проблемы вы можете использовать этот код с небольшими изменениями в соответствии с требованиями.

ValueEventListener singleEventListener = new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot != null) {
            Student student = dataSnapshot.getValue(Student.class);

            Log.d("TAG","name: "+student.getName());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d("onCancelled - ", databaseError.toException());
    }
};

if (mFirebaseDatabaseReference == null) {
    mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
    //mFirebaseDatabaseReference.keepSynced(true);
}
mFirebaseDatabaseReference = mFirebaseDatabaseReference.child(Constant_String.Table_User);
mFirebaseDatabaseReference.addListenerForSingleValueEvent(singleEventListener);

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

0 голосов
/ 31 октября 2018

Предполагая, что схема вашей базы данных выглядит следующим образом:

Firebase-root
   |
   --- users
         |
         --- sec_a
         |    |
         |    --- uid
         |    |    |
         |    |    --- rollno: "Roll Number"
         |    |    |
         |    |    --- name: "User Name"
         |    |    |
         |    |    --- attendance: true
         |    |
         |    --- //other 40 users
         |
         --- sec_b
         |
         --- sec_c

И если вы хотите, например, отображать только имена и имена всех идентификаторов, присутствующих в одном из разделов (например, sec_a), используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference sectionRef = rootRef.child("users").child("sec_a");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            String rollno = ds.child("rollno").getValue(String.class);
            Log.d(TAG, name + " / " + rollno);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
sectionRef.addListenerForSingleValueEvent(valueEventListener);
0 голосов
/ 31 октября 2018

это довольно просто.

String sectionSelectedByUser = "sec_a"; // For example

Теперь получаем ссылку на базу данных firebase

if (FirebaseAuth.getInstance().getCurrentUser() != null){ // if you need user to be signed in.. 
            FirebaseDatabase.getInstance().getReference().child("users").child(sectionSelectedByUser).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { // iterates through all your UID in this section
                        if (childSnapshot.hasChild("name")){ // if current uid has name then fetch it
                            String name = childSnapshot.child("name").getValue().toString();
                        }

                        if (childSnapshot.hasChild("rollno")){ // if current UID has rollno then fetch it
                            String rollno =  childSnapshot.child("rollno").getValue().toString();
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

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