Java Android:从firebase数据库获取具有两个ValueEventListener的数据(在Arraylist过期之前设置适配器)
我正在开发一个应用程序,数据库中有医生和病人这样的用户。患者数据中可能有医生用户ID,医生数据中可能有患者Java Android:从firebase数据库获取具有两个ValueEventListener的数据(在Arraylist过期之前设置适配器),java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在开发一个应用程序,数据库中有医生和病人这样的用户。患者数据中可能有医生用户ID,医生数据中可能有患者用户ID。因为应用程序内的医生会看到一些关于他/她的患者的信息。我开发了这段代码,但在设置适配器之前,我无法将患者信息添加到ArrayList中。这是我的密码: myRef.child("users") .child(firebaseUser.getUid()).child("patients").addValueEventListener(new ValueEv
用户ID
。因为应用程序内的医生会看到一些关于他/她的患者的信息。我开发了这段代码,但在设置适配器之前,我无法将患者信息添加到ArrayList中。这是我的密码:
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
是空的。如何解决该问题?若要解决此问题,请移动以下代码行:
PatientSelectionAdapter adapter= new PatientSelectionAdapter(getContext(),name,sicks,hastauid);
rv.setAdapter(adapter);
rv.setLayoutManager(new LinearLayoutManager(getContext()));
在第二个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()
具有异步行为。请参阅模式详细信息。您需要:
我试过了,但有个问题:患者正在拍摄伤口照片,并在每张照片后更新照片总数。当这是添加新照片的方式时,相同患者的4个数据将显示在“回收器”视图中。如何解决该问题Alex?让我们一次只回答一个问题。使用我上面的代码,您的
RecyclerView
是否仍然为空?不,代码正在工作。RecyclerView中有患者。我们可以通过第二个问题还是发布一个新主题?
PatientSelectionAdapter adapter= new PatientSelectionAdapter(getContext(),name,sicks,hastauid);
adapter.notifyDataSetChanged();