Android и db4o.Can Создать БД на эмуляторе, но не на реальном устройстве

Я пишу свое первое приложение для Android. И я хотел использовать db4o, просто потому, что никогда не использовал его раньше. Я просто пытаюсь открыть / создать базу данных. Все работает нормально, когда я запускаю это на виртуальном устройстве. Но когда я собираюсь на свое реальное устройство, я всегда получаю исключения, написанные ниже:

  ...ActivityClass{
private void deleteDB() {
    DatabaseHandler db = new DatabaseHandler();
    db.open(getString(R.string.database));
    db.deleteAll();
    db.close();
}
}....
The R.string.database = /data/data/de.workingtimemanager.urb/databases/WTM.db
my package = de.workingtimemanager.urb

public class DatabaseHandler {
    private ObjectContainer database;
public DatabaseHandler() {}

public void open(String name) {
    EmbeddedConfiguration conf = Db4oEmbedded.newConfiguration();
    conf.common().objectClass(User.class).cascadeOnDelete(true);
    conf.common().objectClass(User.class).cascadeOnUpdate(true);
    conf.common().objectClass(Project.class).cascadeOnDelete(true);
    conf.common().objectClass(Project.class).cascadeOnUpdate(true);
    database = Db4oEmbedded.openFile(conf, name);
    }
}
11-01 13:38:36.385: ERROR/AndroidRuntime(4774): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.workingtimemanager.urb/de.workingtimemanager.urb.WorkingTimeManagerActivity}: com.db4o.ext.Db4oIOException: /data/data/de.workingtimemanager.urb/databases/WTM.db (No such file or directory)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.os.Handler.dispatchMessage(Handler.java:99)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.os.Looper.loop(Looper.java:123)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.ActivityThread.main(ActivityThread.java:3691)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at java.lang.reflect.Method.invokeNative(Native Method)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at java.lang.reflect.Method.invoke(Method.java:507)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at dalvik.system.NativeStart.main(Native Method)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774): Caused by: com.db4o.ext.Db4oIOException: /data/data/de.workingtimemanager.urb/databases/WTM.db (No such file or directory)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.io.RandomAccessFileFactory.newRandomAccessFile(RandomAccessFileFactory.java:26)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.io.FileStorage$FileBin.<init>(FileStorage.java:43)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.io.FileStorage.open(FileStorage.java:22)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.io.StorageDecorator.open(StorageDecorator.java:27)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.io.CachingStorage.open(CachingStorage.java:52)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.internal.IoAdaptedObjectContainer.openImpl(IoAdaptedObjectContainer.java:57)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.internal.ObjectContainerBase$1.run(ObjectContainerBase.java:140)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.foundation.DynamicVariable.with(DynamicVariable.java:54)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.foundation.Environments.runWith(Environments.java:28)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.internal.ObjectContainerBase.withEnvironment(ObjectContainerBase.java:161)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.internal.ObjectContainerBase.open(ObjectContainerBase.java:131)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.internal.IoAdaptedObjectContainer.<init>(IoAdaptedObjectContainer.java:35)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.internal.ObjectContainerFactory.openObjectContainer(ObjectContainerFactory.java:18)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.Db4oEmbedded.openFile(Db4oEmbedded.java:65)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at de.workingtimemanager.urb.db.DatabaseHandler.open(DatabaseHandler.java:33)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at de.workingtimemanager.urb.WorkingTimeManagerActivity.deleteDB(WorkingTimeManagerActivity.java:22)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at de.workingtimemanager.urb.WorkingTimeManagerActivity.onCreate(WorkingTimeManagerActivity.java:15)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     ... 11 more

11-01 13:38:36.385: ERROR/AndroidRuntime(4774): Caused by: java.io.FileNotFoundException: /data/data/de.workingtimemanager.urb/databases/WTM.db (No such file or directory)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at java.io.RandomAccessFile.<init>(RandomAccessFile.java:132)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at java.io.RandomAccessFile.<init>(RandomAccessFile.java:173)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     at com.db4o.io.RandomAccessFileFactory.newRandomAccessFile(RandomAccessFileFactory.java:19)

11-01 13:38:36.385: ERROR/AndroidRuntime(4774):     ... 29 more

2 ответа

Вы проверили, что можете создать и написать файл в этом месте? Обычно вы используете каталог данных для этого, чтобы убедиться, что у вас есть соответствующие права:

    String filePath = this.getFilesDir() + "/android.db4o";
    final EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
    config.common().add(new AndroidSupport());
    ObjectContainer db = Db4oEmbedded.openFile(config,filePath);

Проверьте, db4o JAR-файл существует в библиотеке. Если библиотека также имеет AndroidDependency, он также должен содержать db4o фляга Если его не существует, ClassNotFoundError может произойти.

Чтобы исправить эту проблему, вы можете удалить AndroidDependency из библиотеки проекта или добавить db4o фляга к AndroidDependency

Другие вопросы по тегам