【问题标题】:ArrayIndexOutofBoundException - Java - Android - Receiving streaming data and storing in multi-dimensional array JavaArrayIndexOutofBoundException - Java - Android - 接收流数据并存储在多维数组中 Java
【发布时间】:2014-04-04 23:35:06
【问题描述】:

我通过蓝牙实时接收 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] 你真的需要它吗?
  • 我最终会在未来将其更改为 [2]、[3]。我想首先测试它是否适用。我的 hjorthClass 也需要一个二维数组。
  • 数组太多,你没有包含所有的大小
  • 我将编辑我的问题以包含数组大小

标签: java android arrays bluetooth indexoutofboundsexception


【解决方案1】:

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

【讨论】:

  • 您确实修复了 ArrayIndexOutofBoundException,但是,我在我的 Android 上收到此错误 -“活动蓝牙聊天(在应用程序蓝牙聊天中)没有响应。我有两个选项,关闭或等待。跨度>
  • 可能是因为你在 gui 线程中循环。您应该启动一个单独的线程并在后台运行它,然后以某种方式收集结果。
  • 您能详细说明一下吗?我不明白。
  • 图形用户界面 (gui) 在绘制和绘制屏幕的线程中运行。如果您在两者之间运行一个循环,并且该循环需要一些时间才能完成,那么它会阻塞 gui 线程,完成循环的执行,然后再次更新 gui,可能在几秒钟或更长时间之后。所以你按顺序运行。通过在单独的线程中运行代码,您可以并行运行,并且 gui 线程会保持正常更新。
猜你喜欢
  • 2018-02-21
  • 2014-01-04
  • 2015-05-27
  • 2012-06-02
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多