public void onClick(View v){ Log.d("DEBUG", "DatabaseTest :: onClick()"); dbAdapter = new DBAdapter(); dbAdapter.open(); dbAdapter.create(lat, lng); }
지금 위도,경도 받아서 화면에 보여주고 버튼 누르면 db에 저장하는 프로그램 만들고 있는데
빨간 글씨 부분(dbAdapter.open();)에서 error 가 납니다. java.lang.nullpointerexception 이구요 .. 이게 null값인것을 가져다 쓰거나 참조하려고 할 때 난다고
하는데 제 부족한 지식으로는 어딘지 잘 모르겠습니다아.. (자바공부 더 열심히 할게요.. ㅠㅠ)
아래코드에서 getwritabledatabase()에서도 문제가 발생하는 것같은데..
해결 방법 힌트좀 부탁드립니당 .. ㅠㅠ!!
public DBAdapter open() throws SQLException{ dbHelper = new myDBHelper(context); db = dbHelper.getWritableDatabase(); return this; }
public void DBAdatper(Context ctx){ context = ctx; dbHelper = new myDBHelper(context); }
답변 감사합니다~~!! 근데 보시다 시피 위에 코드 작성했는데도 불구하고 죽어버립니다.
log 찍고 해본결과 db = dbHelper.getWritableDatabase(); 이부분에서 죽어버리는 것 같은데요 ㅠㅠ..
public void close(){
db.close();
}
public long create(double latitude, double longitude) {
ContentValues cv = new ContentValues();
cv.put(COL_LAT, latitude);
cv.put(COL_LNG, longitude);
return db.insert(TABLE_NAME, null, cv);
}
private static class myDBHelper extends SQLiteOpenHelper{
public myDBHelper(Context context)
{
super(context, DATABASE_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE);
Log.d("DEBUG","SUCCESS AT ONCREATE");
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
//이전 버전 DB 삭제하고 다시 생성
Log.w(TAG,"Version mismatch:" + oldVersion +"to"+ newVersion);
db.execSQL("DROP TABLE IF EXISTS"+TABLE_NAME);
onCreate(db);
}
}
메소드들은 이런식으로 되어있습니당..getWriteDatabase()이후엔 어플이 꺼지구요 ㅠㅠ..
dbAdapter = new DBAdapter(this);
dbAdapter.open();
이 구문을 Activity 메인에 넣으면.. 실행시키자마자 죽고..onClick에 넣으면 버튼 누르면 죽습니다..흐규..
부족한 저를 어여삐 여기사 한번만 다시 살펴주실 수 잇을까요? ㅠㅠ 부탁드려요..
제가 보기엔 context를 안넘겨 줘서 그런거 같네요...
혹시
DBAdapter 클래스의 생성자가
아래와 비슷하게 context를 넘겨주는 부분이 있는지 확인하시고..
없으면 아래와 같이 생성하시고 쓰심되겠네요.
DBAdapter(Context ctx); 가 있는지 확인해보세요..
{
context = ctx;
}
dbAdapter = new DBAdapter(this);
dbAdapter.open();