Как исправить пропуски процесса в цикле в Android Studio - PullRequest
0 голосов
/ 29 марта 2019

В основном я хочу получить строковую переменную, а затем проверить свой один из узлов моей базы данных firebase, чтобы увидеть, существует ли дочерний элемент этой строки, если это так, я хочу, чтобы значения, специфичные для этой строки, были добавлены в мою базу данных, но выполнение не происходит одно за другим, цикл не всегда ожидает полной проверки, существует ли строка как дочерняя в базе данных, он иногда пропускает ее, и, следовательно, значения, которые должны быть добавлены, не все добавляется

Я запускаю эту операцию в отдельном потоке, кстати

      count = i;
        Elements mShowUpdateName = doc.select("div[class=data main]").select("b").eq(i);
        mUpdateName = mShowUpdateName.text();


        Elements mShowEpisodeDate = doc.select("div[class=data main]").eq(i);
        mEpisodeDate = mShowEpisodeDate.text();


        int startIndex = mUpdateName.indexOf("-");

        mSeriesName = mEpisodeDate.substring(0,startIndex-1);
        Log.e("child" , mSeriesName);


        usersTVSeriesRef.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String mString = mSeriesName.replace(".", "");
                if(dataSnapshot.hasChild(mString)){

                    int first = mEpisodeDate.indexOf("-");
                    int second = mEpisodeDate.indexOf("-", first + 1);

                    String season = mEpisodeDate.substring(first+1, second);


                    second = mEpisodeDate.indexOf("-", first + 1);
                    int last = mEpisodeDate.lastIndexOf("-");

                    String episode = mEpisodeDate.substring(second+1, last);

                    int startIndexDate = mEpisodeDate.indexOf("[");
                    int endIndexDate = mEpisodeDate.lastIndexOf("]");
                    String date = mEpisodeDate.substring(startIndexDate +1 , endIndexDate);


                    HashMap<String, Object> showsMap = new HashMap<>();

                    showsMap.put("date" , date);
                    showsMap.put("episode" , episode);
                    showsMap.put("season", season);
                    showsMap.put("string", mEpisodeDate);

                    showsMap.put("index", Integer.toString(count));
                    showsMap.put("name", mSeriesName);


                    updateRef.child(mString).child(episode).updateChildren(showsMap);

                    }
                else {
                    Log.e("no", "no new updates");
                    Log.e("no", mSeriesName);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }

        });

Я хочу, чтобы он всегда проверял, существует ли значение в базе данных, а затем делал соответственно

В настоящее время журнал

E/loop: Step 1. String: Will And Grace
E/loop: Step 1. String: The Grand Tour
E/loop: Step 1. String: The Good Fight
E/loop: Step 1. String: Hanna
E/loop: Step 1. String: What We Do in the Shadows
E/loop: Step 2. checking if the value exists in the database
    Step 3. value doesn't exist
    Step 2. checking if the value exists in the database
E/loop: Step 3. value doesn't exist
    Step 2. checking if the value exists in the database
    Step 3. value doesn't exist
E/loop: Step 1. String: Jane The Virgin
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. adding value to database
E/loop: Step 1. String: Chicago PD
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. adding value to database
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. adding value to database
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. adding value to database

Я хочу, чтобы он всегда выполнял шаги 1, 2, 3, например,

E/loop: Step 1. String: Chicago Med
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. adding value to database
E/loop: Step 1. String: Chicago Fire
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. adding value to database
E/loop: Step 1. String: MotherFatherSon
E/loop: Step 2. checking if the value exists in the database
E/loop: Step 3. value doesn't exist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...