Как связать новые данные с зарегистрированным пользователем в Firebase? - PullRequest
0 голосов
/ 09 июля 2020

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

Когда я компилирую следующее, я получаю тост «Ученик добавлен» на эмуляторе, но ничего появляется в Firebase - нет новых родительских элементов для «студентов» и новых записей. Может ли кто-нибудь увидеть, где я ошибаюсь?

Я думаю, что использование datasnapshot для получения thecurrentUserId из Firebase может быть утомительным, но когда я просто использовал более простой .getCurrentUser (). GetUid (), я получал то же самое результат, тост успешный, но в базе данных Firebase ничего не отображается.

package com.example.dissertation814.teacher.studentlist;

import java.util.Objects;

public class AddStudentActivity extends AppCompatActivity {

//firebase auth
private FirebaseAuth mAuth;

//navigation variables
public String currentUserAccount;
public String teacherAccountNav = "Teacher";

//user id from firebase
public String currentUserId;

//add student variables
EditText editTextName;
EditText editTextEmail;
Button buttonAddStudent;

DatabaseReference databaseStudents;

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_student);

    //initialise views
    editTextName = findViewById(R.id.nameEditText);
    editTextEmail = findViewById(R.id.emailEditText);
    buttonAddStudent = findViewById(R.id.addStudentButton);

    //get current user id from firebase
    mAuth = FirebaseAuth.getInstance();
    String uid = Objects.requireNonNull(mAuth.getCurrentUser().getUid());
    DatabaseReference userIdDetails = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
    userIdDetails.keepSynced(true);

    //addlistener for current user id
    userIdDetails.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            currentUserId = dataSnapshot.child("userId").getValue().toString();
            //creates new node 'students' linked to 'userId' of current user
            databaseStudents = FirebaseDatabase.getInstance().getReference("students").child(currentUserId);
        }

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

        }
    });

    //calls addStudent method when clicked
    buttonAddStudent.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addStudent();
        }
    });
}

//add new student method
private void addStudent(){
    String studentName = editTextName.getText().toString().trim();
    String studentEmail = editTextEmail.getText().toString().trim();

    if(!TextUtils.isEmpty(studentName)){
        //this string is getting the id from firebase
        String id = databaseStudents.push().getKey();

        Student student = new Student(id, studentName, studentEmail);

        //this sets the student at the child from the id
        //use this to set student at the child for the current user
        databaseStudents.child(id).setValue(student);

        Toast.makeText(this, "Student Added", Toast.LENGTH_LONG).show();

    }else{
        Toast.makeText(this, "Name required", Toast.LENGTH_LONG).show();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...