Для цикла не выполнять весь код, прежде чем продолжить - PullRequest
0 голосов
/ 19 сентября 2018
 for (int i = 1; i < 3; i++) {
        list.add(new Integer(i));
    }
    Collections.shuffle(list);

    for (int i = 0; i < 2; i++) {

        int r = list.get(i);
        numeroRandom = Integer.toString(r);
        Log.d("DEBUG", "teste random :" + list.get(i));
        Log.d("DEBUG", "numeroRandomGerado = " + numeroRandom);

        final DatabaseReference questaoRef = fireBaseRef.child("questoes");
        Log.d("DEBUG", "Loop Stop here");
        questaoRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Log.d("DEBUG", "teste2");
                if (dataSnapshot != null) {
                    Questoes questoes = dataSnapshot.child("id").child(numeroRandom).getValue(Questoes.class);


                    Log.d("DEBUG", "teste3");
                    Questoes objetoQuestao = new Questoes();
                    objetoQuestao.setQuestao(questoes.getQuestao());
                    objetoQuestao.setOpcaoA(questoes.getOpcaoA());
                    objetoQuestao.setOpcaoB(questoes.getOpcaoB());
                    objetoQuestao.setOpcaoC(questoes.getOpcaoC());
                    objetoQuestao.setOpcaoD(questoes.getOpcaoD());
                    objetoQuestao.setResultado(questoes.getResultado());
                    listaQuestoes.add(objetoQuestao);
                    Log.d("DEBUG", "tamanho = " + listaQuestoes.size());


                }
                callBack.onCallback(listaQuestoes);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                throw databaseError.toException();
            }
        });

По какой-то причине мой цикл останавливается на Log.d («DEBUG», «Loop Stop here») и возвращается к началу и выполняет 2 раза оставшуюся часть кода.

это журнал, который я получаю из кода, по какой-то причине останавливается на отладке 3 °, перезапускается и выполняет все заново

teste random :1
numeroRandomGerado = 1
Loop stop here
teste random :2
numeroRandomGerado = 2
Loop stop here - teste 1
teste2
tamanho = 1
callback
teste2
teste3

Когда правильное будет так:

teste random :1
numeroRandomGerado = 1
Loop stop here - teste 1
teste2
teste3
tamanho = 1
callBack
teste random :2
numeroRandomGerado = 2
Loop stop here
teste2
teste3
tamanho = 2
callBack

1 Ответ

0 голосов
/ 19 сентября 2018

это потому, что слушатель onDataChange(DataSnapshot dataSnapshot) находится там, где выполнение становится асинхронным - в то время как вы ожидаете синхронного выполнения.возможно, даже потому, что у него может быть зарегистрирован другой слушатель на .child("questoes"), в то время как ранее зарегистрированный слушатель еще не вернулся.попробуйте установить точки останова и войдите в него, чтобы увидеть, в каком порядке выполняется выполнение.добавление Thread.sleep(2000); после регистрации прослушивателя, скорее всего, должно заставить его работать, как и следовало ожидать.

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