У меня есть класс java (CourseViewTeachers), где я читаю имя пользователя из базы данных firebase, используя uid пользователя. Я написал код для чтения данных в конструкторе этого класса. Конструктор приведен ниже.
public CourseViewTeachers(Courses courses)
{
super(courses.getCourse_uid(), courses.getTecher_uid(), courses.getName());
databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(getTecher_uid());
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User teacher = dataSnapshot.getValue(User.class);
teacherName = teacher.getUser_name();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Я использую этот класс для заполнения пользовательского адаптера массива. Когда я создаю объект этого класса во фрагменте и возвращаю переменную 'teacherName', он возвращает ноль. Код, где я заполняю адаптер, приведен ниже
courseListView = view.findViewById(R.id.my_courses_list);
courseListView.setAdapter(adapter);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
courseList.clear();
for(DataSnapshot snapshot : dataSnapshot.getChildren())
{
CourseViewTeachers courses = new CourseViewTeachers(snapshot.getValue(Courses.class));
if(courses.getTecher_uid().equals(fb_user.getUid()))
{
courseList.add(courses);
}
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
У меня два вопроса:
- Почему это происходит?
- Как решить эту проблему?
Редактировать: чтобы уточнить, где я получаю нольПеременная адаптера во втором фрагменте кода является объектом класса адаптера пользовательского массива. В getView () функции arrayAdapter вызывает getTeacherName () класса CourseViewTeachers. Эта функция просто возвращает значение переменной 'teacherName'. Код специального адаптера массива:
public class CourseViewTeachersAdapter extends ArrayAdapter<CourseViewTeachers> {
private Context context;
private List<CourseViewTeachers> list;
public CourseViewTeachersAdapter(@NonNull Context context, ArrayList<CourseViewTeachers> list)
{
super(context, 0 , list);
this.context = context;
this.list = list;
}
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
{
View listItem = convertView;
if(listItem == null)
listItem = LayoutInflater.from(context).inflate(R.layout.course_view_teachers_layout,parent,false);
CourseViewTeachers obj = list.get(position);
TextView courseView = listItem.findViewById(R.id.course_teachers_view_course_name);
courseView.setText(obj.getName());
TextView teacherName = listItem.findViewById(R.id.course_teachers_view_teacher_name);
teacherName.setText("Teacher : " + obj.getTeacherName());
return listItem;
}
}