0

sqlite 데이터베이스를 만들고 싶지만 항상 nullpointer 예외가 발생합니다.getWritableDatabase의 Sqlite Nullpointer 예외

내 Databasehelper 이런 식으로 시작

: 다음

ContentProvider cp = new ContentProvider(this, this); 

public ContentProvider(Context _context, MainActivity activity) { 
    db = new DatabaseHelper(context); 

을 그리고 Databasehelper 내가 다음 데이터베이스에 어떤 데이터를 기록 할이

public class DatabaseHelper extends SQLiteOpenHelper { 
private static final String DATENBANK_NAME = "serien.db"; 
private static final int DATENBANK_VERSION = 1; 
// Table Names 
private static final String TABLE_SERIEN = "serien"; 
private static final String TABLE_EPISODEN = "episoden"; 

// Common column names 
private static final String KEY_ID = "id"; 

private static final String KEY_NAME = "name"; 
private static final String KEY_ISFAV = "isfav"; 
private static final String KEY_ENR = "episodennr"; 
private static final String KEY_SNR = "staffelnr"; 
private static final String KEY_SID = "serienid"; 
private static final String KEY_RELEASE = "release"; 

// serien table create statement 
private static final String CREATE_TABLE_SERIEN = "CREATE TABLE " 
     + TABLE_SERIEN + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME 
     + " TEXT," + KEY_ISFAV + " INTEGER);"; 

// episoden table create statement 
private static final String CREATE_TABLE_EPISODEN = "CREATE TABLE " 
     + TABLE_EPISODEN + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_ENR + " INTEGER ," + 
     KEY_SNR + " INTEGER ," + KEY_SID + " INTEGER ," + KEY_ID + " TEXT, FOREIGN KEY("+ KEY_SID + ") REFERENCES "+TABLE_SERIEN+"("+KEY_ID+"));"; 

private Context appContext; 

public DatabaseHelper(Context context) { 
    super(context, DATENBANK_NAME, null, DATENBANK_VERSION); 
    appContext = context; 
} // Db() 

@Override 
public void onCreate(SQLiteDatabase db) { 
Log.d("CREATE", CREATE_TABLE_SERIEN); 
    Log.d("CREATE", CREATE_TABLE_EPISODEN); 
db.execSQL(CREATE_TABLE_SERIEN); 
db.execSQL(CREATE_TABLE_EPISODEN); 
} // onCreate() 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_SERIEN); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_EPISODEN); 
    onCreate(db); 
} // onUpgrade() 

@Override 
public void onOpen(SQLiteDatabase db) { 
    super.onOpen(db); 
    if (!db.isReadOnly()) { 
     // Enable foreign key constraints 
     db.execSQL("PRAGMA foreign_keys=ON;"); 
    } 
} 

처럼 보인다 이 방법

public long createSerie(Serie serie) { 
    DatabaseHelper dbHelper = new DatabaseHelper(appContext); 
    SQLiteDatabase db = dbHelper.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, serie.getName()); 
    values.put(KEY_ISFAV, serie.getIsFav()); 

    // insert row 
    long serie_id = db.insert(TABLE_SERIEN, null, values); 

    return serie_id; 

} 

하지만 여기에 문제가 있습니다. 나는 줄에서 ..getWritableDatabase() 오류가 항상 발생했습니다.

이 문제에 대해 많은 스레드를 읽었지만 tryed는 아무 것도 작동하지 않았습니다.

누구에게 어떤 문제가있을 수 있습니까?

대단히 감사합니다!

+0

ur 컨텍스트가 null 인 것 같음 – KOTIOS

답변

1
public ContentProvider(Context _context, MainActivity activity) { 
    db = new DatabaseHelper(context); 

_contextcontext는 다르다.

가능성 있음 context은 초기화되지 않으므로 null입니다. ContextSQLiteOpenHelper의 널 (NULL)을 전달하면 getWritableDatabase()이 호출 될 때 NPE가 getDatabaseLocked()이됩니다.

데이터베이스 도우미에 올바른 컨텍스트를 전달하고 있는지 확인하십시오.

+0

대단히 감사합니다! 나는 바보처럼 느껴진다 ... – Irazzer