ContentProvider.getWriteableDatabase создает исключение NullPointerException

В общем, я пытаюсь написать ContentProvider, который инкапсулирует базу данных SQLite. Я везде смотрел онлайн, следовал нескольким различным учебникам и продолжаю сталкиваться с одной и той же проблемой. Я заметил довольно много людей, задающих тот же вопрос, но ни один из советов там не помог мне.

По сути, всякий раз, когда я вызываю "getWriteableDatabase" в моем SQLiteOpenHelper, он выдает исключение нулевого указателя, и ничего не создается. Вот мой код:

public class DatabaseProvider extends ContentProvider{

private static int DATABASE_VERSION = 1;

public static final String GRADE_COMPOSITION_TABLE = "gradecompositiontable";
public static final String GRADE = "Grade";
public static final String CLASS = "Class";
public static final String CLASS_CODE = "Class_Code";


public static final String ACTIVITY_CODE_TABLE = "activitycodetable";
//CLASS_CODE
public static final String ACTIVITY_CODE = "Activity_Code";

MainDatabaseHelper dbHelper;
public SQLiteDatabase dBase;

@Override
public Uri insert(Uri uri, ContentValues values)  throws SQLiteException{
    System.out.println("Helper: " + dbHelper);
    dBase = dbHelper.getWritableDatabase();  <<<Null exception here
    return null;
}

@Override
public boolean onCreate(){
    dbHelper = new MainDatabaseHelper(getContext());
    return (dbHelper == null)?false:true;
}


protected static final class MainDatabaseHelper extends SQLiteOpenHelper{

    public static String overallDBName = "TeachMEDatabase";

    private static final String SQL_CREATE_GRADE_COMP_TABLE = 
            "CREATE TABLE " +
            GRADE_COMPOSITION_TABLE +
            "(" +
            GRADE + " INTEGER, " +
            CLASS + " TEXT, " +
            CLASS_CODE + " INTEGER PRIMARY KEY)";


    public MainDatabaseHelper(Context context){
        super(context, overallDBName, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_GRADE_COMP_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
        db.execSQL("DROP TABLE IF EXISTS " + GRADE_COMPOSITION_TABLE);
        onCreate(db);
    }

}

Я создаю этот объект из моей основной деятельности, и все работает нормально, пока я не назову "вставить", то есть когда он падает.

РЕДАКТИРОВАТЬ: Вот трассировка стека

04-09 21:53:46.301: E/AndroidRuntime(3397): Uncaught handler: thread main exiting due to uncaught exception
04-09 21:53:46.307: E/AndroidRuntime(3397): java.lang.RuntimeException: Unable to start activity ComponentInfo{sioy.teachme/sioy.teachme.TeachMEFirstActivity}: java.lang.NullPointerException
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.os.Looper.loop(Looper.java:123)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.ActivityThread.main(ActivityThread.java:4363)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at java.lang.reflect.Method.invoke(Method.java:521)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at dalvik.system.NativeStart.main(Native Method)
04-09 21:53:46.307: E/AndroidRuntime(3397): Caused by: java.lang.NullPointerException
04-09 21:53:46.307: E/AndroidRuntime(3397):     at sioy.teachme.data.DatabaseProvider.insert(DatabaseProvider.java:54)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at sioy.teachme.TeachMEFirstActivity.onCreate(TeachMEFirstActivity.java:15)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-09 21:53:46.307: E/AndroidRuntime(3397):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
04-09 21:53:46.307: E/AndroidRuntime(3397):     ... 11 more

0 ответов

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