0

嘿,我是 anrdoid 的新手。几乎我在 db4o 中遇到了问题。当我使用

public static void main(String[] args) {

            ServerConfiguration configuration=
                Db4oClientServer.newServerConfiguration();
        configuration.common().allowVersionUpdates(true);
            configuration.common().activationDepth(4);
        try{


        server=Db4oClientServer.openServer(
                configuration,"test",0);
        System.out.println("It's ok");

        }catch(Exception e){
            System.out.println(e.toString());
        }
     }

只是一个简单的java文件。它工作正常。(我没有名为“test”的文件)。它帮助我创建测试文件。但是当我在android项目中使用相同的代码时。

private ServerDDBB(){
    try{
        if(QSLog.DEBUG_I)
            QSLog.i(CLASS_NAME,"Before to open the DDBB");

        ServerConfiguration configuration=
            Db4oClientServer.newServerConfiguration();
    configuration.common().allowVersionUpdates(true);
        configuration.common().activationDepth(DEEP);
    try{
    server=Db4oClientServer.openServer(
            configuration,"ddbb",0);
    }catch(Exception e){
        Log.e("Can't pass the openServer",e.toString());
    }
        if(server==null)
            if(QSLog.DEBUG_W)
                QSLog.w(CLASS_NAME, "Serer Null");

    }catch(Exception e){
        if (QSLog.DEBUG_E)QSLog.e("hey", ExceptionUtils.exceptionTraceToString(
                e.toString(),
                e.getStackTrace()));
    }
}

它提示我有一个 IO 异常。

这是我的错误警告:com.db4o.io.RandomAccessFileFactory.newRandomAccessFile(RandomAccessFileFactory.java:26) com.db4o.io.FileStorage$FileBin.(FileStorage.java:43) com.db4o.io.FileStorage.open(FileStorage. java:22) com.db4o.io.StorageDecorator.open(StorageDecorator.java:27) com.db4o.io.CachingStorage.open(CachingStorage.java:52) com.db4o.internal.IoAdaptedObjectContainer.openImpl(IoAdaptedObjectContainer.java: 56) com.db4o.internal.ObjectContainerBase$1.run(ObjectContainerBase.java:134) com.db4o.foundation.DynamicVariable.with(DynamicVariable.java:47) com.db4o.foundation.Environments.runWith(Environments.java:28) ) com.db4o.internal.ObjectContainerBase.withEnvironment(ObjectContainerBase.java:155) com.db4o.internal.ObjectContainerBase.open(ObjectContainerBase.java:125) com.db4o.internal.IoAdaptedObjectContainer。(IoAdaptedObjectContainer.java:35) com.db4o.internal.ObjectContainerFactory.openObjectContainer(ObjectContainerFactory.java:18) com.db4o.Db4o.openFile(Db4o.java:224) com.db4o.cs.internal.config.StandardClientServerFactory.openServer (StandardClientServerFactory.java:35) com.db4o.cs.Db4oClientServer.openServer(Db4oClientServer.java:52) com.hlh.ddbb.ServerDDBB.(ServerDDBB.java:37) com.hlh.ddbb.ServerDDBB.createInstance(ServerDDBB. java:84) com.hlh.ddbb.ServerDDBB.getServer(ServerDDBB.java:78) com.hlh.ddbb.ClientDDBB.(ClientDDBB.java:20) com.hlh.SettingsTab.initActivity(SettingsTab.java:196) com .hlh.SettingsTab.onCreate(SettingsTab.java:91) android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) android.app.ActivityThread。handleLaunchActivity(ActivityThread.java:2512) android.app.ActivityThread.access$2200(ActivityThread.java:119) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) android.os.Handler.dispatchMessage(Handler.java :99) android.os.Looper.loop(Looper.java:123) android.app.ActivityThread.main(ActivityThread.java:4363) java.lang.reflect.Method.invokeNative(Native Method) java.lang.reflect. Method.invoke(Method.java:521) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) dalvik。 system.NativeStart.main(本机方法)Looper.loop(Looper.java:123) android.app.ActivityThread.main(ActivityThread.java:4363) java.lang.reflect.Method.invokeNative(Native Method) java.lang.reflect.Method.invoke(Method.java :521) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) dalvik.system.NativeStart.main(Native方法)Looper.loop(Looper.java:123) android.app.ActivityThread.main(ActivityThread.java:4363) java.lang.reflect.Method.invokeNative(Native Method) java.lang.reflect.Method.invoke(Method.java :521) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) dalvik.system.NativeStart.main(Native方法)

任何回复都会很好。

4

1 回答 1

0

看起来您只是尝试使用常规文件名。在 Android 中,您需要将数据库存储在可以访问的位置:

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

顺便提一句。您不需要嵌入式客户端服务器的服务器 jar。您可以使用常规容器打开一个新的会话容器:

ObjectContainer session = rootContainer.ext().openSession();
try {
    // do the operations on the session-container
    session.store(new Person("Joe"));
} finally {
    // close the container. For example when the request ends
    session.close();
}
于 2012-06-20T12:48:00.030 回答