마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

NullPointerException:android.content.Context.openOrCreateDatabase 에러

0 추천

디비에서 삭제 기능 구현중인데

 

삭제 누르면

public void delete(int position) {
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM LOGIN WHERE _ID=1;");
    db.close();

}
SQLiteDatabase db = getWritableDatabase();

여기서 에러가 납니다.

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory)' on a null object reference

 

이 에러가 발생하는데요 어떤걸 해줘야 하나요?

데이터추가 , 셀렉은 잘 동작하고 있습니다.

http://www.masterqna.com/android/69235/%EC%99%B8%EB%B6%80%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%EC%84%9C-sqlite-%EB%94%94%EB%B9%84-%EC%83%9D%EC%84%B1-%EC%97%90%EB%9F%AC%EC%A7%88%EB%AC%B8

위 글답변대로 해봐도 동일한 에러가 납니다.

 

DBHelper 코드입니다.

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import static android.content.ContentValues.TAG;

public class DBHelper extends SQLiteOpenHelper {
    private Context context;
    private DBHelper dbHelper;
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.context = context;
    }
    @Override public void onCreate(SQLiteDatabase db) {
        try {
            String DROP_SQL = "drop table if exists LOGIN";
            db.execSQL(DROP_SQL);
        } catch(Exception ex) {
            Log.e(TAG, "Exception in DROP_SQL", ex);
        }
        StringBuffer sb = new StringBuffer();
        sb.append(" CREATE TABLE LOGIN ( ");
        sb.append(" _ID INTEGER PRIMARY KEY AUTOINCREMENT, ");
        sb.append(" ID TEXT, ");
        sb.append(" PW TEXT ) ");
        try {
            db.execSQL(sb.toString());
        } catch(Exception ex) {
            Log.e(TAG, "Exception in CREATE_SQL", ex);
        }

        Toast.makeText(context, R.string.make, Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Toast.makeText(context, R.string.upgrade, Toast.LENGTH_SHORT).show();
    }


    public void addLogin(Login login) {
        SQLiteDatabase db = getWritableDatabase();
        StringBuffer sb = new StringBuffer();
        sb.append(" INSERT INTO LOGIN ( ");
        sb.append(" ID, PW ) ");
        sb.append(" VALUES ( ?, ? ) ");
        if(login.getId().equals("") || login.getPw().equals("")){
            Toast.makeText(context, R.string.nodata, Toast.LENGTH_SHORT).show();
        }else{
            db.execSQL(sb.toString(),
                    new Object[]{
                            login.getId(),
                            login.getPw(),
                    });;
            Toast.makeText(context, R.string.insert, Toast.LENGTH_SHORT).show();
        }
    }

    public void delete(int position) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("DELETE FROM LOGIN WHERE _ID=1;");
        db.close();

    }


    public List getAllData() {
        StringBuffer sb = new StringBuffer();
        sb.append(" SELECT _ID, ID, PW FROM LOGIN ");
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery(sb.toString(), null);
        List list = new ArrayList();
        Login login = null;
        while (cursor.moveToNext()) {
            login = new Login();
            login.set_id(cursor.getInt(0));
            login.setId(cursor.getString(1));
            login.setPw(cursor.getString(2));
            list.add(login);
        }
        return list;

    }

}



 

브루스웨인 (8,580 포인트) 님이 2017년 7월 31일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...