вам нужно дождаться ответа от базы данных firebase. Итак, в соответствии с требованиями вашего приложения, внесите следующие изменения в ваш код:
1) создать один интерфейс для получения ответа:
public interface GetFamilyData {
void onDataLoaded(ArrayList<Family> families);
void onError(String errorMsg);
}
2) теперь измените метод loadData (), как показано ниже:
public void loadData(final GetFamilyData familyData) {
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//List<Family> list = new ArrayList<>();
for (DataSnapshot adSnapshot : dataSnapshot.getChildren()) {
Family f = adSnapshot.getValue(Family.class);
mylist.add(f);
}
familyData.onDataLoaded(mylist);
}
@Override
public void onCancelled(DatabaseError databaseError) {
familyData.onError("Error occur while getting family data");
}
});
}
3) теперь вызовите ваш метод loadData ():
loadData(new GetFamilyData() {
@Override
public void onDataLoaded(ArrayList<Family> families) {
Toast.makeText(FamilyRecycler.this, "Size: "+families.size(), Toast.LENGTH_SHORT).show();
list1 = new ArrayList<Family>();
myDB = new DBHelper(this);
while(hasParent(id)){
for(int i=0;i<families.size();i++){
if(families.get(i).getId().equalsIgnoreCase(id)){
list1.add(families.get(i));
id=families.get(i).getFid();
break;
}
}
}
FamilyRecycler.this.setTitle(name+"'s Family Tree");
RecyclerView familyList = findViewById(R.id.familyList);
familyList.setLayoutManager(new LinearLayoutManager(FamilyRecycler.this));
familyList.setAdapter(new FamilyAdapter(list1));
}
@Override
public void onError(String errorMsg) {
Toast.makeText(FamilyRecycler.this, errorMsg, Toast.LENGTH_SHORT).show();
}
});
надеюсь, это сработает для вас