我正在开发一个应用程序,数据库中有像医生和病人这样的用户。患者数据中可能有医生userId,医生数据中可能有患者userId。因为在应用程序中,医生将看到有关其患者的一些信息。我开发了这段代码,但是在设置适配器之前无法将患者信息添加到Arraylist中。这是我的代码:
userId
myRef.child("users") .child(firebaseUser.getUid()).child("patients").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for(DataSnapshot ds: dataSnapshot.getChildren()){ AddingPatients addingpatient = ds.getValue(AddingPatients.class); if(addingpatient.getConfirm().equals("yes")){ myref.child("users").child(addingpatient.getUserId()).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { Users patient = dataSnapshot.getValue(Users.class); name.add(patient.getName()+" "+patient.getSurname()); sicks.add(patient.getSicks()); patientuid.add(patient.getUserId()); } } @Override public void onCancelled(DatabaseError error) { } }); } } PatientSelectionAdapter adapter= new PatientSelectionAdapter(getContext(),name,sicks,hastauid); rv.setAdapter(adapter); rv.setLayoutManager(new LinearLayoutManager(getContext())); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } });
当我调试代码时,看到的是,设置适配器后,患者信息会添加到列表中。所以我RecyclerView是空的。我该如何解决这个问题?
RecyclerView
要解决此问题,请移动以下代码行:
PatientSelectionAdapter adapter= new PatientSelectionAdapter(getContext(),name,sicks,hastauid); rv.setAdapter(adapter); rv.setLayoutManager(new LinearLayoutManager(getContext()));
在第二种onDataChange()方法中,如下所示:
onDataChange()
myref.child("users").child(addingpatient.getUserId()).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { Users patient = dataSnapshot.getValue(Users.class); name.add(patient.getName()+" "+patient.getSurname()); sicks.add(patient.getSicks()); patientuid.add(patient.getUserId()); } PatientSelectionAdapter adapter= new PatientSelectionAdapter(getContext(),name,sicks,hastauid); rv.setAdapter(adapter); rv.setLayoutManager(new LinearLayoutManager(getContext())); } @Override public void onCancelled(DatabaseError error) {} });
发生这种情况是因为onDataChange()具有异步行为。请在这里查看 模式详细信息。