При работе с библиотекой db4o (8.1-SNAPSHOT и 8.0) открытие базы данных работает
oc = Db4oEmbedded.openFile(dbConfig(), db4oDBFullPath(context));
//context.getDir("data", 0) + "/" + "mDB.DB4O"; to get the full path
Однако, как только я начинаю пытаться сохранить объект
oc.store(объект)
Я получаю сообщение об ошибке cannot cast java.lang.Long to java.lang.Integer
. Эта проблема, вероятно, вызвана новой реализацией dalvik для новых версий ОС Android, но доступны ли какие-либо исправления или обходные пути для этой ошибки?
Парень представлял патч здесь, но он недоступен.
Полный стек ошибки
Обновлять:
Итак, после трассировки ошибки выясняется, что внутри com.db4o.internal.DalvikVM
в версии 8.0 происходит ужасное приведение типов из Long в Integer.
интервал _methodId; _methodId = (Целое число)structorIdMethod.invoke(null, Object.class);
Я попытался исправить это, объявив переменную as long. Я перекомпилировал и снова запустил на Android, я получил еще одну ошибку, которая
UnsupportedOperationException: java.lang.NoSuchMethodException: newInstance [class java.lang.Class, int]
Вызвано этим:
Любая подсказка, как решить эту проблему?
try {
_method = ObjectStreamClass.class.getDeclaredMethod("newInstance", Class.class, Integer.TYPE);
_method.setAccessible(true);
} catch (Exception e) {
throw new UnsupportedOperationException(e);
}
}
Мне удалось это исправить, создав патч в коде db4o 8.1.