2013-07-27 4 views
1

getWritableDatabase 메서드를 호출 할 때 예외가 throw되었습니다. 문맥에 관한 문제와 관련있는 몇 가지 유사한 문제를 읽었지만 그 이유는 모르겠다. 여기 컨텍스트 예외 Android getWritableDatabase

는 로그 캣이다

07-22 09:33:57.534: E/AndroidRuntime(406): FATAL EXCEPTION: main 
07-22 09:33:57.534: E/AndroidRuntime(406): java.lang.NullPointerException 
07-22 09:33:57.534: E/AndroidRuntime(406): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
07-22 09:33:57.534: E/AndroidRuntime(406): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.example.login.DBEntrenamiento.addEntrenamiento(DBEntrenamiento.java:26) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.example.login.Entrenamiento.saveEntrenamiento(Entrenamiento.java:136) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.example.login.Entrenamiento.access$2(Entrenamiento.java:127) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.example.login.Entrenamiento$2.onExecuteHttpPostAsyncListener(Entrenamiento.java:106) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.example.login.HttpClientManager$1.run(HttpClientManager.java:129) 
07-22 09:33:57.534: E/AndroidRuntime(406): at android.os.Handler.handleCallback(Handler.java:587) 
07-22 09:33:57.534: E/AndroidRuntime(406): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-22 09:33:57.534: E/AndroidRuntime(406): at android.os.Looper.loop(Looper.java:123) 
07-22 09:33:57.534: E/AndroidRuntime(406): at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-22 09:33:57.534: E/AndroidRuntime(406): at java.lang.reflect.Method.invokeNative(Native Method) 
07-22 09:33:57.534: E/AndroidRuntime(406): at java.lang.reflect.Method.invoke(Method.java:521) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-22 09:33:57.534: E/AndroidRuntime(406): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-22 09:33:57.534: E/AndroidRuntime(406): at dalvik.system.NativeStart.main(Native Method) 

및 여기 예외 던진 코드 :

public DBEntrenamiento(Context context) { 
    super(context); 
} 

public void addEntrenamiento(String nombre, String descripcion, String tipo) { 


    SQLiteDatabase db = this.getWritableDatabase(); 
    if(db != null){ 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NOMBRE, nombre); 
     values.put(KEY_DESCRIPCION, descripcion); 
     values.put(KEY_TIPO, tipo); 

     db.insert(Table, null, values); 
     db.close(); 
    } 
    else{ 
     String error = "error de apertura db"; 
    } 

} 

및 이이 사용해 헬퍼

public class bbdd extends SQLiteOpenHelper{ 



     private static String name = "android"; 
     private static int version = 1; 
     private static CursorFactory cursorFactory = null; 

     public bbdd(Context context){ 
     super(context,name,cursorFactory, version); 
     } 

     private String SQLCreateLogin = "CREATE TABLE login(" 
       + " id INTEGER PRIMARY KEY," 
       + " name TEXT," 
       + " email TEXT UNIQUE," 
       + " uid TEXT," 
       + " created_at TEXT" + ")"; 
     private String SQLCreateEntrenamiento = "CREATE TABLE entrenamiento(" 
       + " id INTEGER PRIMARY KEY," 
       + " nombre TEXT," 
       + " descripcion TEXT," 
       + " tipo TEXT," 
       + " created_at TEXT" + ")"; 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(SQLCreateLogin); 
     db.execSQL(SQLCreateEntrenamiento); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS entrenamiento"); 

     //Se crea la nueva versión de la tabla 
     db.execSQL(SQLCreateEntrenamiento); 

    } 

} 

답변

0

된다

SQLiteDatabase db; 
클래스 전역 변수로

메이크 DB 변수와

public DBEntrenamiento(Context context) { 
    super(context); 
    db = this.getWritableDatabase(); 
} 

의 초기화 방법 및 DB에서 초기화를 제거

public void addEntrenamiento(String nombre, String descripcion, String tipo) { 
}