2011-08-23 5 views
0

왜이 두 줄의 코드가 NPE를 던집니까?null 포인터 SQLite 데이터베이스 만들기

SQLiteDatabase db; 
db = openOrCreateDatabase("TestingData.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); 

스택 트레이스는 :

08-23 10:33:14.285: ERROR/AndroidRuntime(1001): Caused by: java.lang.NullPointerException 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at org.*****.android.CopyOfSQLLite.data(CopyOfSQLLite.java:14) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at org.******.android.*****.****(****.java:200) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at org.********.android.****.onCreate(DashboardPage.java:25) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
+0

오류가 정확히 여기에오고 있습니까? –

+0

그리고 마지막 매개 변수를 null로 설정 한 경우 왜 3 개의 매개 변수가있는 메서드를 사용하고 있습니까? 매개 변수 만 예상하는 방법도 있습니다. (http://developer.android.com/reference/android/database/såqlite/SQLiteDatabase.html#openOrCreateDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory)) – RoflcoptrException

답변

1

ContextWrapper에는 기본 컨텍스트가 없습니다. 거의 확실하게이 메소드를 올바른 위치에서 호출하지는 않을 것이지만 좀 더 많은 코드 없이는 더 이상 말할 수는 없습니다.

+0

그래서 어떻게 할 수 있습니까? 당신은이 문제를 해결합니까? – kosala

0

안드로이드에 대해 좋은 점은 open source 것입니다. 그래서 우리는 openOrCreateDatabase()는 다음과 같이 구현되는 것을 볼 수 있습니다

public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) { 
    return mBase.openOrCreateDatabase(name, mode, factory); 
} 

유일한 방법 나는 mBase가 null의 경우 NPE를 던지는이 코드는 볼 수 있습니다. 귀하의 전화 협약에서 귀하의 수업은 android.content.ContextWrapper에서 파생되었다고 가정합니까? 그렇다면 클래스가 인스턴스화 될 때 기본 컨텍스트 (mBase)가 설정되도록 하시겠습니까? 그렇지 않다면 문제의 원인이 될 것입니다.

관련 문제