单击时找不到局部变量,调试器打开 Looper.java,应用死机
Cannot find local variable on click, debugger opens Looper.java, app dies
我正在尝试学习如何制作带有显示进度的点的 viewPager,基本上是那些欢迎屏幕,我正在学习教程。它有很好的注释,我似乎明白发生了什么,但是当我单击我的 "next" 按钮时,应用程序死了。
我附上了下面的代码,以及我在调试器中遇到的错误的屏幕截图。希望有人能够提供帮助。我已经按照教程中的原样返回所有内容,以确保不是我的 "creative input" 弄乱了,但它仍然崩溃了。 "skip" 按钮工作正常:
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();
}
}
});
}
这是 "Fatal exception" 我得到的:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.signs, PID: 31291
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.example.android.signs.WelcomeActivity.addBottomDots(WelcomeActivity.java:99)
at com.example.android.signs.WelcomeActivity.access0(WelcomeActivity.java:24)
at com.example.android.signs.WelcomeActivity.onPageSelected(WelcomeActivity.java:123)
at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1947)
at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:686)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:670)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:631)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:612)
at com.example.android.signs.WelcomeActivity.onClick(WelcomeActivity.java:80)
at android.view.View.performClick(View.java:6305)
at android.view.View$PerformClick.run(View.java:24840)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6501)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Application terminated.
^ 在这里,我一直希望它能跳过并转到下一页
^ 当我跨过去时,我得到了一个 "Cannot find local variable 'btnNext'",带我去循环并卡住了。发现一些人在 gradle 中关闭 testCoverage 的主题,但那不存在,仍然添加它并将其设置为 "false" 但错误保持不变。
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("•"));
dots[i].setTextSize(35);
dots[i].setTextColor(colorsInactive[0]);
dotsLayout.addView(dots[i]);
}
if (dots.length > 0)
dots[currentPage].setTextColor(colorsActive[0]);
}
问题在于您将当前页面(正在增加)用作未增加的数组的索引。点数组的索引将始终为 0,所以只需使用 0。我认为,我能够一直到主屏幕,很难说什么时候我什么都看不懂。我认为您甚至不需要点数组。
我正在尝试学习如何制作带有显示进度的点的 viewPager,基本上是那些欢迎屏幕,我正在学习教程。它有很好的注释,我似乎明白发生了什么,但是当我单击我的 "next" 按钮时,应用程序死了。
我附上了下面的代码,以及我在调试器中遇到的错误的屏幕截图。希望有人能够提供帮助。我已经按照教程中的原样返回所有内容,以确保不是我的 "creative input" 弄乱了,但它仍然崩溃了。 "skip" 按钮工作正常:
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();
}
}
});
}
这是 "Fatal exception" 我得到的:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.signs, PID: 31291 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at com.example.android.signs.WelcomeActivity.addBottomDots(WelcomeActivity.java:99) at com.example.android.signs.WelcomeActivity.access0(WelcomeActivity.java:24) at com.example.android.signs.WelcomeActivity.onPageSelected(WelcomeActivity.java:123) at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1947) at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:686) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:670) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:631) at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:612) at com.example.android.signs.WelcomeActivity.onClick(WelcomeActivity.java:80) at android.view.View.performClick(View.java:6305) at android.view.View$PerformClick.run(View.java:24840) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6501) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Application terminated.
^ 在这里,我一直希望它能跳过并转到下一页
^ 当我跨过去时,我得到了一个 "Cannot find local variable 'btnNext'",带我去循环并卡住了。发现一些人在 gradle 中关闭 testCoverage 的主题,但那不存在,仍然添加它并将其设置为 "false" 但错误保持不变。
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("•"));
dots[i].setTextSize(35);
dots[i].setTextColor(colorsInactive[0]);
dotsLayout.addView(dots[i]);
}
if (dots.length > 0)
dots[currentPage].setTextColor(colorsActive[0]);
}
问题在于您将当前页面(正在增加)用作未增加的数组的索引。点数组的索引将始终为 0,所以只需使用 0。我认为,我能够一直到主屏幕,很难说什么时候我什么都看不懂。我认为您甚至不需要点数组。