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

ArrayIndexOutofBoundException-Java-Android-接收流数据并存储在多维数组Java中,java,android,arrays,bluetooth,indexoutofboundsexception,Java,Android,Arrays,Bluetooth,Indexoutofboundsexception,我通过蓝牙实时接收30000个字符串,大约每秒1000个。我将数据解析为双精度数据,并尝试将这30000个数据点存储到多维数组[30000][1]。但是,当我运行Android应用程序时,由于ArrayIndexOutofBoundException,它在几点后崩溃 我确实意识到这可以在单个数组中完成,但我最终会增加数组的宽度 存储的数组大小=[30000][1] convert的数组大小=[1] 蓝牙聊天 case MESSAGE_READ: for (int a = 0; a <

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

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

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

convert的数组大小=
[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;

首先声明一个大小为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];

如果你的第二维度是[1],你真的需要它吗?我最终会把它改成[2],[3]。我想先测试一下它的工作原理。我的hjorthClass也采用2D数组。数组太多,您没有包含所有数组的大小。我将编辑我的问题以包含数组大小。您确实修复了ArrayIndexOutofBoundException,但是,我在Android上遇到此错误-“活动蓝牙聊天(应用程序蓝牙聊天)没有响应。我有两个选项,关闭或等待。可能是因为你在gui线程中循环。你应该启动一个单独的线程并在后台运行,然后以某种方式收集结果。你能详细说明一下吗?我不明白。图形用户界面(gui)在绘制和绘制屏幕的线程中运行。如果在其间运行循环,并且该循环需要一些时间才能完成,则它会阻止gui线程,完成循环的执行,然后再次更新gui,可能需要几秒钟或更长时间。因此,您可以按顺序运行。通过在单独的线程中运行代码,您可以并行运行,并且e gui线程保持正常更新。以下是一个示例:
stored[a][j]= convert[j];