NumberPicker中ArrayIndexOutOfBoundsException解决方案
2016-05-31 16:49
429 查看
场景
通常使用NumberPicker我们都是只初始化一次数据就好了,但最近项目需要做一个城市选择器,每次选择了一个省份或者城市,都会去更新下城市或者区县。然而使用如下代码去更新NumberPicker数据时,会报数组越界的异常:
解决方案一
1、当前NumberPicker的最大值大于数组大小时,先setMaxValue再setDisplayedValues。
2、当前NumberPicker的最大值小于数组大小时,先setDisplayedValues再setMaxValue。
解决方案二(推荐):
在设置最大值和最新数组数据前,先将数据设为null。
以上两种方案亲测可以解决越界问题
通常使用NumberPicker我们都是只初始化一次数据就好了,但最近项目需要做一个城市选择器,每次选择了一个省份或者城市,都会去更新下城市或者区县。然而使用如下代码去更新NumberPicker数据时,会报数组越界的异常:
private void updateCitySelector() { cityPicker.setDisplayedValues(mCitys); cityPicker.setMaxValue(mCitys.length - 1); }
java.lang.ArrayIndexOutOfBoundsException: length=1; index=3 at android.widget.NumberPicker.ensureCachedScrollSelectorValue(NumberPicker.java:1882) at android.widget.NumberPicker.incrementSelectorIndices(NumberPicker.java:1848) at android.widget.NumberPicker.scrollBy(NumberPicker.java:1142) at android.widget.NumberPicker.computeScroll(NumberPicker.java:1097) at android.view.View.draw(View.java:15984) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16111) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16204) at android.view.View.draw(View.java:16113) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16111) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16111) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16204) at android.view.View.draw(View.java:16113) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16204) at android.view.View.draw(View.java:16113) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16111) at android.view.ViewGroup.drawChild(ViewGroup.java:3610) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400) at android.view.View.draw(View.java:16204) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
解决方案一
1、当前NumberPicker的最大值大于数组大小时,先setMaxValue再setDisplayedValues。
2、当前NumberPicker的最大值小于数组大小时,先setDisplayedValues再setMaxValue。
private void updateCitySelector() { int oldMax = cityPicker.getMaxValue(); int newMax = mCitys.length - 1; if(newMax > oldMax) { cityPicker.setDisplayedValues(mCitys); cityPicker.setMaxValue(newMax); } else { cityPicker.setMaxValue(newMax); cityPicker.setDisplayedValues(mCitys); } }
解决方案二(推荐):
在设置最大值和最新数组数据前,先将数据设为null。
private void updateCitySelector() { cityPicker.setDisplayedValues(null); cityPicker.setMaxValue(mCitys.length - 1); cityPicker.setDisplayedValues(mCitys); }
以上两种方案亲测可以解决越界问题
相关文章推荐
- Java读写文件方法总结(推荐)
- 判断密码
- 关于shaderLab中 tags(标签)
- Unity调用IOS时间日期控件UIDatePicker
- Java基础第十三天总结
- Linux系统下修改环境变量PATH路径的三种方法
- poj 3378 Crazy Thairs
- SLAM: RtabMap中文解析
- tomcat部署项目如何去掉项目名称
- php_pdo 异常处理
- 利用vector定义MAT类对象数组的方法
- Android开发:ZXing条码扫描-竖屏解决方案
- reorder-list(Leetcode)
- 第7课时《osg交互》
- 欢迎使用CSDN-markdown编辑器
- 卡尔曼滤波的原理说明
- Github README.md
- 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)
- Jquery自定义插件
- 输入输出2