Не удается найти локальную переменную при нажатии, отладчик открывает Looper.java, приложение умирает - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь научиться создавать viewPager с точками, отображающими прогресс, в основном с экранами приветствия, и я следую учебному пособию. Это хорошо аннотировано, и я, кажется, понимаю, что происходит, однако когда я нажимаю кнопку «Далее», приложение умирает.

Я прилагаю приведенный ниже код и снимок экрана с ошибкой, полученной в отладчике. Надеюсь, кто-нибудь сможет помочь. Я вернул все, как было в учебнике, чтобы убедиться, что это не мой «творческий вклад», который портит, но все же он дает сбой. Кнопка «пропустить» работает просто отлично:

myViewPagerAdapter = new MyViewPagerAdapter();
    viewPager.setAdapter(myViewPagerAdapter);
    viewPager.addOnPageChangeListener(viewPagerPageChangeListener);

    btnSkip.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            launchHomeScreen();
        }
    });

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // checking for last page
            // if last page home screen will be launched
           int current = getItem(+1);
            if (current < layouts.length) {
                // move to next screen
                viewPager.setCurrentItem(current);
            } else {
                launchHomeScreen();
            }
        }
    });
}

Это «фатальное исключение», которое я получаю:

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.android.signs, PID: 31291 java.lang.ArrayIndexOutOfBoundsException: length = 1; Индекс = 1 в com.example.android.signs.WelcomeActivity.addBottomDots (WelcomeActivity.java:99) на com.example.android.signs.WelcomeActivity.access $ 400 (WelcomeActivity.java:24) на com.example.android.signs.WelcomeActivity $ 2.onPageSelected (WelcomeActivity.java:123) на android.support.v4.view.ViewPager.dispatchOnPageSelected (ViewPager.java:1947) на android.support.v4.view.ViewPager.scrollToItem (ViewPager.java:686) на android.support.v4.view.ViewPager.setCurrentItemInternal (ViewPager.java:670) на android.support.v4.view.ViewPager.setCurrentItemInternal (ViewPager.java:631) на android.support.v4.view.ViewPager.setCurrentItem (ViewPager.java:612) на com.example.android.signs.WelcomeActivity $ 1.onClick (WelcomeActivity.java:80) на android.view.View.performClick (View.java:6305) на android.view.View $ PerformClick.run (View.java:24840) на android.os.Handler.handleCallback (Handler.java:790) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6501) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807) Приложение прекращено.

^ Здесь я всегда надеюсь, что он просто перешагнет и перейдет на следующую страницу

^ Когда я перехожу, я получаю сообщение «Не могу найти локальную переменную« btnNext »», приводит меня к зацикливанию и застревает. Нашел некоторые темы, в которых люди отключали testCoverage в gradle, но этого не было, все равно добавили его и установили «false», но ошибка не изменилась.

Также добавляется хранилище: https://github.com/simplydikka/traffic.git

1 Ответ

0 голосов
/ 02 ноября 2018
 private void addBottomDots(int currentPage) {
        dots = new TextView[layouts.length];

        int[] colorsActive = getResources().getIntArray(R.array.array_dot_active);
        int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive);
        int index = currentPage;
        dotsLayout.removeAllViews();
        for (int i = 0; i < dots.length; i++) {
            dots[i] = new TextView(this);
            dots[i].setText(Html.fromHtml("&#8226;"));
            dots[i].setTextSize(35);
            dots[i].setTextColor(colorsInactive[0]);
            dotsLayout.addView(dots[i]);
        }

        if (dots.length > 0)
            dots[currentPage].setTextColor(colorsActive[0]);
    }

Проблема в том, что вы используете текущую страницу (которая увеличивается) в качестве индекса для массива, который не увеличивается. Индекс массива точек всегда будет 0, так что просто используйте 0. Я смог сделать его полностью на главном экране, я думаю, трудно сказать, когда я ничего не могу прочитать. Я не думаю, что вам даже нужен массив для точек.

...