код продолжает выполняться до завершения onDataChange - PullRequest
0 голосов
/ 09 мая 2018

мое текущее создание на вкладке фрагмента:

 @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.tab1_frag, container, false);
    Bundle bundle = this.getArguments();
    if (bundle != null) {
        class_name = bundle.getString("tab1");
    }
    recyclerView = view.findViewById(R.id.recyclerview_tab1);
    recyclerViewAdepter = new RecyclerViewAdepter(getContext(), list);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
    recyclerView.setAdapter(recyclerViewAdepter);

    class_name = "oops";
    Log.d("tag6", class_name);
    return view;


}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    mapFromDB = new HashMap<String, String>();
    Log.d("tag1", class_name);
    db = FirebaseDatabase.getInstance().getReference().child("CLASS").child("123").child("day1");
    db.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d("tag2", "ok");
            for (DataSnapshot dbclass : dataSnapshot.getChildren()) {
                mapFromDB.put(dbclass.getKey().toString(), dbclass.getValue().toString());
                Log.d("tag3", "ok");
            }
            recyclerViewAdepter.set_map(mapFromDB);
            check = "123";
            Log.d("tag4", check);
            adding();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

            check = "456";
            adding();

        }
    });


}

public void sendToDB()

{
    db = FirebaseDatabase.getInstance().getReference().child("CLASS").child(class_name).child("day1");
    db.setValue(recyclerViewAdepter.get_map());

}


void adding() {
    Log.d("tag5", check);
    list = new ArrayList<>();
    list.add(new days_fragment(ourdata.Hours[0], check));
    list.add(new days_fragment(ourdata.Hours[1]));
    list.add(new days_fragment(ourdata.Hours[2]));
    list.add(new days_fragment(ourdata.Hours[3]));
    list.add(new days_fragment(ourdata.Hours[4]));
    list.add(new days_fragment(ourdata.Hours[5]));
    list.add(new days_fragment(ourdata.Hours[6]));
    list.add(new days_fragment(ourdata.Hours[7]));
    list.add(new days_fragment(ourdata.Hours[8]));
    list.add(new days_fragment(ourdata.Hours[9]));
    list.add(new days_fragment(ourdata.Hours[10]));
    list.add(new days_fragment(ourdata.Hours[11]));
    list.add(new days_fragment(ourdata.Hours[12]));

}

и результат logcat:

com.example.project D / tag1: tt

com.example.project D / tag5: 000

com.example.project D / tag6: упс

com.example.project D / tag2: ok

com.example.project D / tag3: ok

com.example.project D / tag4: 123

tag 5 & 6 стоит перед 2,3,4, почему этовзлом и как его решить?

1 Ответ

0 голосов
/ 09 мая 2018

Прослушиватели событий Firebase работают асинхронно. Получение данных по методу onCreateView должно решить вашу проблему. Это сделает ваш код более нечитаемым и сложным для понимания, но до сих пор это решение, которое я мог бы применить и получить результат. Пожалуйста, дайте мне знать, если вы найдете лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...