android NumberPicker 数组越界的坑

被这个问题耽误了一个多小时。。。

直接上解决方案,参考红色部分。

private void initViews() {
        wheel = (NumberPicker) findViewById(R.id.info_wheel_province);
        wheelCity = (NumberPicker) findViewById(R.id.info_wheel_city);
        wheelCity.setWrapSelectorWheel(false);

        //读取地址信息json
        final List<CityBean> cityBeans = ResUtils.initCityList(this);
        final String[] pros = new String[cityBeans.size()];

        for (int i = 0; i < pros.length; i++) {
            pros[i] = cityBeans.get(i).getProvince();
        }

//        wheel.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
//        wheelCity.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
        wheel.setMaxValue(pros.length - 1);
        wheel.setMinValue(0);
        wheel.setWrapSelectorWheel(false);
        wheel.setDisplayedValues(pros);
        wheel.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {

            @Override
            public void onValueChange(NumberPicker picker, int oldVal, final int newVal) {
                String citys = cityBeans.get(newVal).getCitys();
                final String[] split = citys.split(",");
                wheelCity.setMinValue(0);
                wheelCity.setValue(0);
                if (split.length - 1 > wheelCity.getMaxValue()) {
                    wheelCity.setDisplayedValues(split);
                    wheelCity.setMaxValue(split.length - 1);
                } else {
                    wheelCity.setMaxValue(split.length - 1);
                    wheelCity.setDisplayedValues(split);
                }
                wheelCity.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {

                    @Override
                    public void onValueChange(NumberPicker picker2, int oldVal2, int newVal2) {
                        Toast.makeText(InfoActivity.this, pros[newVal] + " " + split[newVal2], Toast.LENGTH_LONG).show();
                    }
                });
            }
        });
    }

有兴趣的可以研究一下源码找下原因。

时间: 2024-11-07 19:32:00

android NumberPicker 数组越界的坑的相关文章

Android 【问题汇总】列表数组越界的问题

遇到了一个诡异的问题,ListView发生数组越界(偶尔会),程序崩溃. 错误信息如下: W/dalvikvm( 5176): threadid=1: thread exiting with uncaught exception (group=0x40015568) E/zhe800_android( 5176): Invalid index 2, size is 0 E/zhe800_android( 5176): java.lang.IndexOutOfBoundsException: In

QRCode 数组越界异常

因为需求的缘故需要解析出ios二维码的地址,把解析的地址传到按钮上 把功能写好之后用几张二维码测试没问题后提交到svn上,第二天生产环境正好发版,发现有个应用的按钮点了一直没反应,看了下控制台发现报错 居然是数组越界...纠结了好久.最后点到那个二维码看看有什么特别之处 一切尽在无言中(我擦...居然是1000多像素的二维码,你逗我呢)...

谨防数组越界!

今天第一次对数组越界问题有了深切的感受,数组越界如果在Release版本中运行也不会报错,如果是Debug版本的话,若直接通过常量数值引用数组下标会被检测到数组越界,若通过变量引用数组下标也是不会被检测到的!!! 测试下面的代码, 1 #include <stdio.h> 2 3 int main(void) 4 { 5 int arr[1][1] = {20}, brr[1] = {1}, y = 5; 6 7 //printf("%d\n", arr[5][0] ==

数组越界

1. 找出下列代码的错误 void test() { char string[10]; char *str="0123456789"; strcpy(string,str); }字符串str需要11个字节才能存放下(包括末尾的'\0'),而string只有10个字节的空间:strcpy会导致数组越界. void test() { char string[10]; char str[10]; int i; for(int i=0; i<10; i++) { str[i]='a';

iOS 数组越界 Crash处理经验

我们先来看看有可能会出现的数组越界Crash的地方: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { WelfareItem *item = [_datasourceArray objectAtIndex:indexPath.row];//有可能会越界,你在下拉刷新时会用[_datasourceArray removeAllObjects],这时你又点了某个

数组越界保护与消息传递black机制

数组越界保护if(index.row <= [array count]) 发送消息[[NSNotificationCenter defaultCenter]     postNotificationName:@"chuandi" object:self]; 接收消息 自己写个action的动作[[NSNotificationCenter defaultCenter] addObserver:self                                         

ListView 适配器实现getviewtypcount() 数组越界IndexOutOfBoundException

ListView中Item的多布局显示,需要用到了getViewTypecount和getItemViewType这两个重写方法,但是做完后出现了如下提示错误:java.lang.ArrayIndexOutOfBoundsException: (数组越界) 原因:居然是getItemViewType这里里面返回的Type必须是从0开始的,如果getviewtypecount等于2,那么getItemViewType返回的数值是从0~1的常数.简单说,在刚开始设置type常量时,是从0开始递增的,

iOS 关于数组越界的解决方法

所谓的数组越界,就是假如你的下标总数现在为32个,然后你在下一秒又执行了一个方法要从50个数据里惊醒赋值啊 筛选之类的 而你此时数量为32 50的数据还没有请求到 往往会出现数组越界的崩溃信息 大概是这样的 -[__NSArrayI objectAtIndex:]: index 100 beyond bounds [0 .. 9]'  具体的解决方式我们通常会选择把数组做个判断列如 return nil; 虽然在大多数情况下是可以的,但是多少并不严谨,如果你设置了一个事件循环执行的NStimer

从一道简单模拟题看数组越界以及其他

题目要求比较明确,可能做起来难度不是很大. 但我这道题用了比较久的时间. 原因是我用了一种特别容易错的方法.我在移动数组元素的时候采用不用辅助数组由前往后复制的方法(想来我也真是没事找事干),然后在这种方法下我起初交了许多遍WA,然后自己经过长时间的测试终于发现了问题所在,不止一个,各种逻辑错误. 总结主要有以下几点: 分类讨论不够明确,不够完整 没有考虑到前边操作对后边数据的影响 没有意识到数组越界的后果(a[-1],a[maxn]) 要发现和解决这些问题并不容易,需要有很高的调试技巧,通过这