Я хочу добавить список студентов в свою базу данных 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();
}
}