【发布时间】:2018-06-14 22:34:04
【问题描述】:
Fatal Exception: java.lang.ArrayIndexOutOfBoundsException
Out of range in /Users/cm/Realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsResults.cpp line 108(requested: 0 valid: 0) io.realm.internal.OsResults.nativeGetRow
MainActivity.randomizeEvents (MainActivity.java:1600)
...MainActivity$42.run (MainActivity.java:1739)
randomizeEvents()
public void randomizeEvents() {
Realm nrealm;
nrealm = Realm.getDefaultInstance();
RealmResults<Event> eventList = nrealm.where(Event.class).equalTo("theevent", "theevent").findAll();
if(eventList.size() != 0) {
evt = eventList.get(0); <<<<<<<<<line 1600
nrealm.beginTransaction();
evt.setDurations();
nrealm.commitTransaction();
}
}
方法启动 Runnable
RealmResults<Event> eventList = realm.where(Event.class).equalTo("theevent", "theevent").findAll();
evt = eventList.get(0);
if(!eventTimerRunning) {
runnable = new Runnable() {
public void run() {
if(!realm.isClosed()) {
eventTimerRunning = true;
randomizeEvents(); <<<<<<<<line 1739
handler.postDelayed(runnable, 30000);
}
}
};
handler.postDelayed(runnable, 5000);
}
我在不同的部分都遇到了这个错误,但他们都在做同样的事情。我有一个Runnable 用于不同的事情。例如,这个将在初始延迟后每 30 秒运行一次该方法。我在Runnable 中使用Realm 的一个新实例,因为在UI 线程上使用一个实例和在runnable 上使用一个实例时出错等。
if 语句为if(eventList.size() != 0),因此大小为 1+。为什么eventList.size() 等于或大于 1,但仍然会收到关于 eventList.get(0) 为 null 的错误?
【问题讨论】:
-
您使用的是哪个版本的 Realm?
-
如果将 if 替换为 for 循环,结果是否相同? realm.io/docs/java/latest/#iterations-snapshots
标签: java android realm runnable realm-java