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

외부클래스에서 sqlite 디비 생성 에러질문

0 추천

DB생성하는 매서드를 mainActivity 클래스 안에 넣으면 잘 작동하는데

이렇게 분리해서 생성하려면 에러가나네요..

이유가 뭘까요???

 

 

일단 mainActivity입니다. 

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DB_LocalDatabase db= new DB_LocalDatabase();
    db.create_bookMark_db();

 

다음은 DB class입니다

public class DB_LocalDatabase extends AppCompatActivity{

    SQLiteDatabase db;
//DB생성 또는 열기
    public void create_bookMark_db(){

        final String db_name = "_bible";

        try {
            db = openOrCreateDatabase(db_name, Activity.MODE_PRIVATE, null);

            Log.d("메시지","디비생성 완료");
        }catch(Exception e){
            e.printStackTrace();
            Log.d("메시지","fail to create or open database");
        }
    }

 

0-12 02:25:23.351 12699-12732/com.example.pc. D/NetworkSecurityConfig: No Network Security Config specified, using platform default
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err: 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
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:283)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at com.example.pc..DB_LocalDatabase.create_bookMark_db(DB_LocalDatabase.java:30)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at com.example.pc..MainActivity.onCreate(MainActivity.java:121)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.Activity.performCreate(Activity.java:6664)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.ActivityThread.-wrap12(ActivityThread.java)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.os.Looper.loop(Looper.java:154)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6077)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
10-12 02:25:23.384 12699-12699/com.example.pc. W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
10-12 02:25:23.384 12699-12699/com.example.pc. D/메시지: fail to create or open database

익명사용자 님이 2016년 10월 12일 질문

1개의 답변

0 추천
openOrCreateDatabase 메소드는 Context의 메소드입니다.

지금 따로 빼신 Class에서 AppCompatActivity를 상속받고 계신데

이렇게 한다고 Context가 만들어지는게 아닙니다.

차라리 메소드에서 Context  파라미터로 받아서 실행하시는게 좋습니다.

 

public class DB_LocalDatabase {

    SQLiteDatabase db;
    //DB생성 또는 열기
    public void create_bookMark_db(Context context){

        final String db_name = "_bible";

        try {
            db = context.openOrCreateDatabase(db_name, Activity.MODE_PRIVATE, null);

            Log.d("메시지","디비생성 완료");
        }catch(Exception e){
            e.printStackTrace();
            Log.d("메시지","fail to create or open database");
        }
    }
}
원조안드로이드 (58,190 포인트) 님이 2016년 10월 12일 답변
...