简体   繁体   中英

Android and db4o.Can Create db on emulator but not on real device

I'm writing my first Android app. And i wanted to use db4o, just because i've never used it before. I just try to open/create the database.Everything works fine when i running this on a virtual device. But when im going for my real device i always get the exceptions written below:

  ...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

Did you check that you can create and write a file at that location? Usually you use the data directory for this to be sure that you have the proper rights:

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

Check whether db4o jar file exists in library. If Library also has AndroidDependency , it should also contain db4o jar file. If it doesn't exist, ClassNotFoundError might occur.

Inorder to fix this issue, u can either remove AndroidDependency from the project library or add db4o jar file to the AndroidDependency

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM