sinat_35241575
sinat_35241575
2017-07-23 01:25
采纳率: 83.3%
浏览 1.5k

一个关于数组越界的问题

前辈们,我碰到一个数组越界的问题,也定位到哪一句了,可是各种改都不对。请前辈们指点一下,大家遇到数组越界问题时都是如何解决的呢?我的APP安装在小米PAD3上,第一次打开时是崩溃的,一闪而退,然后出现这个错误。第二次打开就没有问题了,求解。另外,我用魅族手机就没事,一次就能打开,也不报错,请前辈指点。
logcat如下:
07-23 09:05:05.936: E/AndroidRuntime(14208): FATAL EXCEPTION: Thread-7
07-23 09:05:05.936: E/AndroidRuntime(14208): Process: com.Frank.wifirobot, PID: 14208
07-23 09:05:05.936: E/AndroidRuntime(14208): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
07-23 09:05:05.936: E/AndroidRuntime(14208): at com.Frank.wifirobot.WifiRobot_right$7.run(WifiRobot_right.java:593)
07-23 09:05:05.936: E/AndroidRuntime(14208): at java.lang.Thread.run(Thread.java:761)
部分代码如下:
我贴一些代码出来,其中错误定位在if (msg2ch[0] == ':') 上。

 while(true){

                    //char msg2ch[]=new char[100];
                    char msg2ch[];
                    try {
                        PubUtil.msg2 = PubUtil.br.readLine();
                        if ( ( PubUtil.msg2  ) != null ) {

                            msg2ch = PubUtil.msg2.toCharArray();//将字符串对象中的字符转换为一个字符数组
                        //if (msg2ch.length!=0) {
                                if (msg2ch[0] == ':') {

                                    switch (msg2ch[1]) {
                                        case 'Z': {
                                            PubUtil.dis[0] = msg2ch[2];  //距离百位
                                            Log.e("dis[0]:", "" + msg2ch[2]);
                                            PubUtil.dis[1] = msg2ch[3];  //距离十位
                                            Log.e("dis[1]:", "" + msg2ch[3]);
                                            PubUtil.dis[2] = msg2ch[4];  //距离个位
                                            Log.e("dis[2]:", "" + msg2ch[4]);
                                            break;
                                        }

                                        case 'X': {
                                            PubUtil.temp[0] = msg2ch[2];   //水温百位
                                            Log.e("temp[0]:", "" + msg2ch[2]);
                                            PubUtil.temp[1] = msg2ch[3];  //水温十位
                                            Log.e("temp[1]:", "" + msg2ch[3]);
                                            PubUtil.temp[2] = msg2ch[4];  //水温个位
                                            Log.e("temp[2]:", "" + msg2ch[4]);
                                            break;
                                        }

                                        case 'Y': {
                                            PubUtil.power[0] = msg2ch[2];   //功率百位
                                            Log.e("power[0]:", "" + msg2ch[2]);
                                            PubUtil.power[1] = msg2ch[3];  //功率十位
                                            Log.e("power[1]:", "" + msg2ch[3]);
                                            PubUtil.power[2] = msg2ch[4];  //功率个位
                                            Log.e("power[2]:", "" + msg2ch[4]);
                                            break;



  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • qq_30552993
    骚剑客 2017-07-28 06:15
    已采纳

    会不会是PubUtil.br.readLine(),读取太耗时间了,使得msg2ch为null或者msg2ch.length==0

    点赞 评论
  • zml_moxueli
    呓语的风 2017-07-23 03:41

    就在这一行 if (msg2ch[0] == ':') {
    你在上一行加日志 读取msg2ch.length 看看是不是0

    点赞 评论
  • Ae_fring
    逆流的剑客 2017-07-24 02:57

    1、先定义数组,再使用。可能你这数组都没定义就用就报越界了呗。2、PubUtil.br.readLine();读取的这个字符null。最好debug跟踪看下最明显。

    点赞 评论
  • zengxianzi
    昭杏之念 2017-07-24 07:44

    肯定是PubUtil.br.readLine();这个方法返回的数据长度为0了,可能是机型不同导致你,你着重看先pubutil.br.reandine里面实现了什么,为什么第一次打开返回的长度为0。如果实在没办法,可以用调acitivty的finsh之后再start一次应该就可以了

    点赞 评论
  • yuexiaduzhe
    方格白帽 2017-07-25 05:36

    加个非空判断且长度大于0

    点赞 评论

相关推荐