我使用Realm
,这是一个用于在移动设备上创建持久对象的框架。 Realm
不支持嵌套事务。所以问题是:我有一个带有静态块的类,它执行Realm
事务,但是,第一次在我的代码中使用该类是通过其中一个静态方法来自另一个Realm
交易。我得到的错误是java.lang.ExceptionInInitializerError
,它是由此引起的:
Caused by: java.lang.IllegalStateException: Nested transactions are not allowed. Use commitTransaction() after each beginTransaction().
它带给我的导致错误的代码行是执行事务的静态块中的行。
因为第一次使用类是在Realm
事务中,所以看起来静态块直到那一点才执行,这就是我得到嵌套事务引起的错误的原因。
所以只是为了澄清,类具有什么类型的变量并不重要:静态,静态最终,或者它们是作为实例变量初始化还是在静态块中初始化。在第一次与类进行交互之前,这些变量不会被初始化。正确的吗?
以下是静态块中出现的代码:
RealmSingleton.getUserInstance().executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
users.deleteAllFromRealm();
}
});