2015-12-02 89 views
0

Я создавал проект android для тестирования db4o и сталкивался с некоторыми проблемами, я скомпилировал файл jar файла db4o-8.0.184.15484-all-java5.jar в build.gradle под папкой libs. В моем классе db4oHelper у меня есть следующие:Настройка db4o в android

import java.io.IOException; 
import android.content.Context; 
import android.util.Log; 
import com.db4o.Db4oEmbedded; 
import com.db4o.ObjectContainer; 
import com.db4o.config.EmbeddedConfiguration; 

public class Db4oHelper { 

private static ObjectContainer oc = null; 
private Context context; 

/** 
* @param ctx 
*/ 
public Db4oHelper(Context ctx) { 
    context = ctx; 
} 

/** 
* Create, open and close the database 
*/ 
public ObjectContainer db() { 

    try { 
     if (oc == null || oc.ext().isClosed()) { 
      oc = Db4oEmbedded.openFile(dbConfig(), db4oDBFullPath(context)); 
     } 

     return oc; 

    } catch (Exception ie) { 
     Log.e(Db4oHelper.class.getName(), ie.toString()); 
     return null; 
    } 
} 

/** 
* Configure the behavior of the database 
*/ 

private EmbeddedConfiguration dbConfig() throws IOException { 
    EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration(); 
    configuration.common().objectClass(Student.class).objectField("name") 
      .indexed(true); 
    configuration.common().objectClass(Student.class).cascadeOnUpdate(true); 
    configuration.common().objectClass(Student.class) 
      .cascadeOnActivate(true); 
    return configuration; 
} 

/** 
* Returns the path for the database location 
*/ 

private String db4oDBFullPath(Context ctx) { 
    return ctx.getDir("data", 0) + "/" + "myDatabase.db4o"; 
} 

/** 
* Closes the database 
*/ 

public void close() { 
    if (oc != null) 
     oc.close(); 
} 
} 

У меня есть еще один класс называется DB4OProvider, который содержит:

/** 
* Created by manish on 2015-12-01. 
*/ 
import java.util.List; 
import android.content.Context; 

public class DB4OProvider extends Db4oHelper { 

private static DB4OProvider provider = null; 

//configure Db4oHelper by Passing Context. 
public DB4OProvider(Context ctx) { 
    super(ctx); 
} 

public static DB4OProvider getInstance(Context ctx) { 
    if (provider == null) 
     provider = new DB4OProvider(ctx); 
    return provider; 
} 

//This method is used to store the object into the database. 
public void store(Student exercise) { 
    db().store(exercise); 
} 

//This method is used to delete the object into the database. 
public void delete(Student exercise) { 
    db().delete(exercise); 
} 

//This method is used to retrive all object from database. 
public List<Student> findAll() { 
    return db().query(Student.class); 
} 

//This method is used to retrive matched object from database. 
public List<Student> getRecord(Student s) { 
    return db().queryByExample(s); 
} 
} 

У меня также есть очень простой класс Student, который просто принимает в имя, возраст и регистрации число в конструкторе.

Но когда я пытаюсь отправить данные, я получаю сообщение очень длинное ошибке, говорящее:

Caused by: java.lang.NullPointerException: Attempt to invoke interface  
method 'void com.db4o.ObjectContainer.store(java.lang.Object)' on a null object reference 
     at com.example.manish.dbtest.DB4OProvider.store(DB4OProvider.java:26) 
     at com.example.manish.dbtest.MainActivity.onSubmit(MainActivity.java:47) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at android.view.View$1.onClick(View.java:4015) 
     at android.view.View.performClick(View.java:4780) 
     at android.view.View$PerformClick.run(View.java:19866) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5257) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Я не понимаю, почему это исключения нулевого указателя или как это исправить, любая помощь будет очень thanked, Thanks

+0

Возможный дубликат [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -Это) – Zoe

ответ

0

Вы уверены, что получили все записи и oc не являются нулевыми (catch часть кода)?

 Смежные вопросы

  • Нет связанных вопросов^_^