开发者

Android SQLiteOpenHelper NullPointerException on getwritabledatabase()

开发者 https://www.devze.com 2023-03-17 02:01 出处:网络
I\'m now search for hours for a solution for the following problem: I\'m using a SQLite Database for an Androidapplication:

I'm now search for hours for a solution for the following problem:

I'm using a SQLite Database for an Androidapplication:

My OpenHelper extends SQLiteOpenHelper

public OpenHelper(Context context) {
    super(context, "ukra.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL("CREATE TABLE client_version (integer myID primary key)");
    database.execSQL("INSERT INTO client_version VALUES ('0')");
}

The openHelper is used by my class DatabaseLoader:

private Context context;
private SQLiteDatabase db;
private OpenHelper openHelper;

public DatabaseLoader(Context context){
    //Constructor
    this.context = context;
    this.openDB();
}

public void openDB(){
    this.openHelper = new OpenHelper(this.context);
    System.out.println("database = " +openHelper);
    try{
        db = this.openHelper.getWritableDatabase();
    }catch(Exception ex){
        ex.printStackTrace();
    }
    System.out.println("database = " +db);
}

I create the DatabaseLoader in my LevelCoordinator:

private LevelCoordinator(Context context) {
    this.context = context;
    this.dbLoader = new DatabaseLoader(this.context);
    this.level = new boolean[] { true, false, false };
}

public static LevelCoordinator getInstance(Context context) {
    if (INSTANCE == null){
        INSTANCE = new LevelCoordinator(context);
    }
    return INSTANCE;
}

The LevelCoordinator gets the context from an activity:

public class UkRA extends Activity {
private LevelCoordinator lc = LevelCoordinator.getInstance(this);
//...
}

The problem is a NullpointerException wich is thrown by call getWritableDatabase

W/System.err(  359): java.lang.NullPointerException
W/System.err(  359):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
W/System.err(  359):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
W/System.err(  359):    at de.htw.f4.ai.s4.logic.database.DatabaseLoader.openDB(DatabaseLoader.java:28)
W/System.err(  359):    at de.htw.f4.ai.s4.logic.database.DatabaseLoader.<init>(DatabaseLoader.java:21)
W/System.err(  359):    at de.htw.f4.ai.s4.logic.LevelCoordinator.<init>(LevelCoordinator.java:26)
W/System.err(  359):    at    de.htw.f4.ai.s4.logic.LevelCoordinator.getInstance(LevelCoordinator.java:35)
W/System.err(  359):    at de.htw.f4.ai.s4.UkRA.<init>(UkRA.java:17)
W/System.err(  359):    at java.lang.Class.newInstanceImpl(Native Method)
W/System.err(  359):    at java.lang.Class.newInstance(Class.java:1429)
W/System.err(  359):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
W/System.err(  359):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
W/System.err(  359):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
W/System.err(  359):    at android.app.ActivityThread.access$2300(ActivityT开发者_运维技巧hread.java:125)
W/System.err(  359):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
W/System.err(  359):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(  359):    at android.os.Looper.loop(Looper.java:123)
W/System.err(  359):    at android.app.ActivityThread.main(ActivityThread.java:4627)
W/System.err(  359):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(  359):    at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err(  359):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
W/System.err(  359):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
W/System.err(  359):    at dalvik.system.NativeStart.main(Native Method)

Has anybody an idea why there is a NullPointer and how i can solve it?


<application
      android:requestLegacyExternalStorage="true" >
</application>

Enable LegacyExternalStorage in the AndroidManifest file, by default it's FALSE.

Also pass

Environment.getExternalStorageDirectory().getPath()+"/ukra.db"

instead of "/ukra.db"

it may help you.

0

精彩评论

暂无评论...
验证码 换一张
取 消