Android Realm Java 0.82.1 ArrayIndexOutOfBoundsException

时间:2015-08-28 12:06:35

标签: java android exception indexoutofboundsexception realm

尝试从域(0.82.1)更新objet时出现此错误:

  

rowIndex>可用行:0> 0

Realm realm = null;

try{
    realm = Realm. getInstance ( context );
    RealmResults<Track> results = realm.allObjects( Track.class )
        .where()
        .equalTo("fileType", type)
        .equalTo("fileState", actualState)
        .equalTo("fileName", fileName)
        .findAll();

   //At this point result.size() = 1

   for( int i = 0; i < results.size(); i++ )
   {
       realm.beginTransaction();
       results.get( i ).setFileState(newState);
       realm.commitTransaction();
   }

}catch ( RealmException e ) {
    Log.d( TAG, e.getMessage());
}catch ( RealmIOException e ) {
    Log.d( TAG, e.getMessage());
}catch ( Exception e ) {
    Log.d( TAG, e.getMessage());
}
finally {
    if (realm != null) {
        realm.close();
    }
}

我也尝试过Iterator,但我也有同样的错误。

要点:

  • 每次都会崩溃。 (我已多次见过)
  • 可重复使用。
  • Android 4.4.4(三星Galaxy S3),5.0.1(三星Galaxy Note4)上遇到的崩溃事件

崩溃是在for循环中。我捕获了以下异常:

rowIndex 0 > 0 - invalid!
jni: ThrowingException 7, rowIndex > available rows: 0 > 0

任何解决方案?

1 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为您正在修改正在迭代的RealmResults。这是一个已知问题,您可以在此处跟踪其进度:https://github.com/realm/realm-java/issues/640

作为一种解决方法,您可以在迭代期间将要修改的对象保存在另一个列表中,然后迭代新列表以进行实际修改。