sinat_35241575 2017-07-23 01:25 采纳率: 83.3%
浏览 1574
已采纳

一个关于数组越界的问题

前辈们,我碰到一个数组越界的问题,也定位到哪一句了,可是各种改都不对。请前辈们指点一下,大家遇到数组越界问题时都是如何解决的呢?我的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条回答 默认 最新

  • BandaYung 2017-07-28 06:15
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能