繁体   English   中英

ArrayIndexOutofBoundException-Java-Android-接收流数据并存储在多维数组Java中

[英]ArrayIndexOutofBoundException - Java - Android - Receiving streaming data and storing in multi-dimensional array Java

我通过蓝牙实时接收30000个字符串,大约每秒1000个。 我将数据解析为双精度并试图将30000个数据点存储到多维array[30000][1]但是,当我运行Android应用程序时,由于ArrayIndexOutofBoundException ,在经过几点后崩溃。

我确实意识到这可以在单个数组中完成,但最终我会增加数组的宽度。

存储的数组大小= [30000][1]

转换的数组大小= [1]

蓝牙聊天

case MESSAGE_READ:
    for (int a = 0; a < 30000; a++) {
        byte[] readBuf = (byte[]) msg.obj;
        try {
            String readMessage = new String(readBuf, 0, msg.arg1);
            mConversationArrayAdapter.add("Voltage: " + readMessage);
            double[] convert = new double[1];

            for (int z = 0; z < 1; z++) {
                convert[z] = Double.parseDouble(readMessage);
            }
            for (int j = 0; j < 1; j++) {
                stored[a][j] = convert[a];
            }
        } catch (NumberFormatException e) {
            System.err.println("NumberFormatException: " + e.getMessage());
        }
    }

    finalValue = new HjorthClass(stored);
    if (finalValue.returnSum() == true) {
        seizureResult.setText("A Seizure has been detected");
    }
    break;

logcat;

04-04 22:44:17.406: E/AndroidRuntime(14619): FATAL EXCEPTION: main
    04-04 22:44:17.406: E/AndroidRuntime(14619): java.lang.ArrayIndexOutOfBoundsException
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at com.example.android.BluetoothChat.BluetoothChat$2.handleMessage(BluetoothChat.java:311)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at android.os.Handler.dispatchMessage(Handler.java:99)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at android.os.Looper.loop(Looper.java:130)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at android.app.ActivityThread.main(ActivityThread.java:3683)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at java.lang.reflect.Method.invokeNative(Native Method)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at java.lang.reflect.Method.invoke(Method.java:507)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    04-04 22:44:17.406: E/AndroidRuntime(14619):    at dalvik.system.NativeStart.main(Native Method)

首先,您声明大小为1的双精度数组。

double[] convert = new double[1];

然后,您尝试调用该数组convert [a] ,其中a可能在0到2999之间,一旦a> 0就会超出范围。

stored[a][j]= convert[a]; // a > 0 ? if yes then out of bounds

有你的错误。 我的猜测是:

stored[a][j]= convert[j];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM