Какое поведение структуры данных Firebase лучше в моем случае? - PullRequest
0 голосов
/ 17 мая 2018

Мы создаем приложение, в котором учитель может создать свой реестр классов, и оно должно выглядеть следующим образом: учитель создает свой профиль, после чего выполняется действие с RecyclerView, которое отображает имена учеников.Ниже RecyclerView есть TextView с надписью «Ученик! Создай свой профиль» (конечно, после нажатия на него, есть действие по созданию профиля ученика).Ученик может создать свой профиль только с помощью того же устройства, что и учитель, когда он создавал профиль учителя.Хорошо, это выглядит хорошо, и пока мы все сделали, но здесь возникает наш вопрос. Как лучше всего хранить данные пользователей в этом случае? Должны ли мы структурировать наши данные таким образом?

{
  "Teachers" : {
    "USYSacnOjDR5EAPwljZMHtggN9I2" : {
      "teachername" : {
        "teachername" : "Janis"
      },
        "students" : {
          "0xgMzfOLLwQ2KWF7aKhH5ZIbQnx2":{
            "studentname": "Pavel"

         }
      }
    }
  },

Итак, это похоже на очень плохо структурированные данные, мы знаем это, но, как мы уже говорили, нам нужно отобразить в RecyclerView имена учеников этого конкретного учителя, которые являются другими FirebaseAuthпользователи и имели свои собственные данные, такие как оценки. Каждое мнение или критические замечания приветствуются.

@ Редактировать вот как я получаю данные :) reference = FirebaseDatabase.getInstance (). getReference ("teacher"). child (teacherkey).child ("пользователи");

 reference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                User user = dataSnapshot.child("name").getValue(User.class);
                result.add(user);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                User user = dataSnapshot.child("name").getValue(User.class);
                result.remove(user);
                adapter.notifyDataSetChanged();
            }

1 Ответ

0 голосов
/ 17 мая 2018

Согласно вашему комментарию, возможная структура базы данных может быть такой:

Firebase-root
   |
   --- teachers
   |     |
   |     --- teacherIdOne
   |     |      |
   |     |      --- "teacherName" : "Teacher Name One"
   |     |      |
   |     |      --- students:
   |     |             |
   |     |             --- studentIdOne: "Student Name One"
   |     |             |
   |     |             --- studentIdTwo: "Student Name Two"
   |     |
   |     --- teacherIdTwo
   |            |
   |            --- "teacherName" : "Teacher Name Two"
   |            |
   |            --- students:
   |                   |
   |                   --- studentIdThree: "Student Name Three"
   |                   |
   |                   --- studentIdFour: "Student Name Four"
   |
   --- students
         |
         --- studentIdOne
         |      |
         |      --- "studentName" : "Student Name One"
         |
         --- studentIdTwo
         |      |
         |      --- "studentName" : "Student Name Two"
         |
         --- studentIdThree
         |      |
         |      --- "studentName" : "Student Name Three"
         |
         --- studentIdFour
         |      |
         |      --- "studentName" : "Student Name Four"
         |
         --- studentIdFive
                |
                --- "studentName" : "Student Name Five"

И для отображения всех 5 имен учеников, пожалуйста, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference studentsRef = rootRef.child("students");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String studentName = ds.child("studentName").getValue(String.class);
            Log.d("TAG", studentName);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
studentsRef.addListenerForSingleValueEvent(valueEventListener);

Те будет выход:

Student Name One
Student Name Two
Student Name Three
Student Name Four
Student Name Five

Если вы заинтересованы в отображении этих имен в RecyclerView, , то - это то, как вы можете извлекать данные из базы данных Firebase Realtime и отображать их в RecyclerView, используя FirebaseRecyclerAdapter.

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

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference studentsRef = rootRef.child(teachers).child(teacherId).child("students");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String studentName = ds.getValue();
            Log.d("TAG", studentName);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
studentsRef.addListenerForSingleValueEvent(valueEventListener);

, в котором teacherId - это идентификатор учителя, которого вы хотите показать своим ученикам. Если идентификатор учителя, например, teacherIdOne, вывод будет:

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