Почему метод onDataChange запускается в конце?
Привет, я новичок. Не могу понять, почему в методе onDataChange список centuries заполняется как надо, но стоит обратиться к этому списку из другого места программы, то он оказывается пустым. Не до конца еще все понимаю в этой теме, но если я правильно смотрю по логам, то метод onDataChange запускается в самом конце. Подскажите, что нужно сделать для корректной работы?
Fragment code
public class HomeStartFragment extends Fragment implements recyclerInterface {
private Context context;
private View view;
private RecyclerView rv;
private List<Century> centuries;
private List<Article> articles;
private CenturiesAdapter centuriesAdapter;
private ArticlesAdapter articlesAdapter;
private DatabaseReference mDataBaseCentury, mDataBaseArticle;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public static HomeStartFragment newInstance(String param1, String param2) {
HomeStartFragment fragment = new HomeStartFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i("MyTaggg", "ONCREATE STARTED");
centuries = new ArrayList<>();
articles = new ArrayList<>();
mDataBaseCentury = FirebaseDatabase.getInstance().getReference("Century");
mDataBaseArticle = FirebaseDatabase.getInstance().getReference("Article");
Log.i("MyTaggg", "ListSize in onCreate = " + centuries.size());
getCenturiesFromDB();
getArticlesFromDB();
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
private void getCenturiesFromDB(){
Log.i("MyTaggg", "FUNC STARTED");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Log.i("MyTaggg", "ONDATACHANGE is working");
if(centuries.size()>0){centuries.clear();}
for(DataSnapshot ds : snapshot.getChildren()){
Century century = ds.getValue(Century.class);
assert century !=null;
centuries.add(century);
}
Log.i("MyTaggg","ListSize in func = " + centuries.size());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
mDataBaseCentury.addValueEventListener(valueEventListener);
}
private void getArticlesFromDB(){
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(articles.size()>0){articles.clear();}
for(DataSnapshot ds : snapshot.getChildren()){
Article article = ds.getValue(Article.class);
assert article != null;
articles.add(article);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
mDataBaseArticle.addValueEventListener(valueEventListener);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.i("MyTaggg", "ONCREATEVIEW STARTED");
view = inflater.inflate(R.layout.century_view, container, false);
rv = view.findViewById(R.id.recCenturyView);
centuriesAdapter=new CenturiesAdapter(getContext(),centuries,articles,this);
articlesAdapter = new ArticlesAdapter(getContext(),articles,this);
rv.setAdapter(centuriesAdapter);
rv.setLayoutManager(new LinearLayoutManager(getContext()));
Log.i("MyTaggg", "ListSize in onCreateView = " + centuries.size());
return view;
}
}
Log
2023-06-09 20:20:50.404 1979-1979 MyTaggg com.example.vitsebskhistory I ONCREATE STARTED
2023-06-09 20:20:50.466 1979-1979 MyTaggg com.example.vitsebskhistory I ListSize in onCreate = 0
2023-06-09 20:20:50.466 1979-1979 MyTaggg com.example.vitsebskhistory I FUNC STARTED
2023-06-09 20:20:50.488 1979-1979 MyTaggg com.example.vitsebskhistory I ONCREATEVIEW STARTED
2023-06-09 20:20:50.581 1979-1979 MyTaggg com.example.vitsebskhistory I ListSize in onCreateView = 0
2023-06-09 20:20:51.606 1979-1979 MyTaggg com.example.vitsebskhistory I ONDATACHANGE STARTED
2023-06-09 20:20:51.611 1979-1979 MyTaggg com.example.vitsebskhistory I ListSize in func = 8