【发布时间】:2018-08-23 11:09:43
【问题描述】:
我使用 ArrayList 来存储(作为队列)通过 BLE 接收的数据。我使用相同的 ArrayList 将数据传递给 Bufferedwriter。每次我通过调用.isempty() 方法验证 ArrayList 非空后调用.remove(0) 方法来获取第一个元素。请在下面找到代码示例。
while (!ppgHighQueue.isEmpty()) {
try {
PPG ppg_record = ppgHighQueue.remove(0);
if (ppg_record != null) {
ppg_400Hz_record.write(ppg_record.toString());
ppg_400Hz_record.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
但很少会出现以下异常并导致应用程序崩溃。
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
还有其他可行的方法来存储数据而不是使用 ArrayList 吗?
【问题讨论】:
-
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 这意味着您正在调用空列表的第一个元素。无论您使用地图、数组、列表还是其他类型的集合,问题总是相似的
-
而这段代码是从哪里调用的?因为它不是线程安全的。
-
您是否在多个线程中运行此代码?
-
你用multithreading标记了这个,所以这是从多个线程调用的?如果是这样,可能是两个线程进入循环,一个删除一个元素,第二个线程抛出异常,因为列表为空。
-
@dhke 此方法在单独的线程中运行。这是否意味着我需要同步线程。
标签: java android multithreading arraylist