2014-12-11 2 views
-3

을 가진 Nullpointer 예외를 우리는 데이터베이스의 열 정보를 읽고 싶습니다. 예제를 PRAGMA 테이블 정보로 찾았습니다. 이제 우리는 응용 프로그램을 실행하고 nullpointerexcpetion과 함께 실패하고 우리는 왜 이런 일이 발생하는지 전혀 모릅니다. 다음은 우리 강령의 일부입니다.안드로이드 프로젝트에서 Pragma table_info

public String[] getTableColumns(SQLiteDatabase db, String tableName) 
    { 
     Log.d("ArtDbHandler: ", "getTableColumns Start"); 
     Cursor cursor = null; 
     cursor = db.rawQuery("PRAGMA table_info(" + tableName + ")", null); 
     Log.d("ArtDbHandler: ", "getTableColumns cnt:"+cursor.getCount()); 
     String[] allColumns = new String[cursor.getCount()]; 
     int i = 1; 
     while (!cursor.isAfterLast()) 
     { 
      Log.d("ArtDbHandler: ", "getTableColumns i:"+i); 
      String columnName = cursor.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX); 
      Log.d("ArtDbHandler: ", "getTableColumns columnName:"+columnName); 
      allColumns[i] = columnName; 
      ++i; 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     Log.d("ArtDbHandler: ", "getTableColumns Ende"); 
     return allColumns; 
    } 

LogCat에서 "getTableColumns Start"로그를 얻으면 예외가 발생합니다. 메소드를 우리의 DBHandler 클래스에 정의 된 sqlitedatabase 오브젝트와 tablename으로 호출합니다. 어떤 아이디어?

고맙습니다. 4 도움. T.

는 로그 캣

:

  • 12-11 19 : 03 : 56.634 : D /에서 onCreate 메인 (3325)에서 onCreate 12-11
    다음은 로그 캣이다 : 03 : 56.634 : D/MediumDAO : (3325) : MediumDAO 시작 12-11 19 : 03 : 56.644 : D/MediumDAO : (3325) : MediumDAO Ende 12-11 19 : 03 : 56.644 :
    D/ArtDbHandler :(3325) : getTableColumns 시작 : 중간 12-11
    19 : 03 : 56.644 : D/AndroidRuntime (3325) : VM 1 종료 2-11
    19 : 03 : 56.644 : W/dalvikvm (3325) threadid = 1 :
    캐치되지 제외 종료 스레드 (그룹 = 0x40a71930) 12-11 19 : 03 : 56.664 :
    E/AndroidRuntime (3325) : 치명적인 예외 : 03 : 19 12-11 주요 56.664 :
    E/AndroidRuntime (3325) : java.lang.RuntimeException가가 : 없습니다
    활동
    ComponentInfo {com.example.artdb/com.example을 시작합니다. artdb.ArtDbMainActivity} : java.lang.NullPointerException이 12-11 19 : 03 : 56.664 : (3325)
    E/AndroidRuntime :
    android.app.ActivityThread.performLaunchActivity (ActivityThrea에서 d.java:2180) 12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2230) 12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) : 03 : 56.664 : E/AndroidRuntime (3325)
    android.app에서
    android.app.ActivityThread.access $ 600 (ActivityThread.java:141) 12-11
    19에서. ActivityThread $ H.handleMessage (ActivityThread.java:1234)
    12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    android.os.Handler.dispatchMessage (Handler.java:99) 12-11
    19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    android.os.Looper.loop (Looper.java:137) 12-11 19 : 03 : 56.664 :
    E/AndroidRuntime (3325) :
    android.app.ActivityThread.main에서 (ActivityThread.java:5041) 12-11
    19 : 03 : 56.664 : E/AndroidRuntime (3325) : 03 : 56.664 :
    java.lang.reflect.Method.invokeNative (기본 방법) 12-11
    19시 E/AndroidRuntime (3325) :
    java.lang.reflect.Method.invoke (Method.java:511) 12-11 19:03:56.664 :
    E/AndroidRuntime (3325)에서
    com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 12-11 19 : 03 : 56.664 :/AndroidRuntime (3325) E : 03 : 56.664 :
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 12-11
    19시 E/AndroidRuntime (3325) :
    에서 dalvik.system.NativeStart.main (네이티브 메서드) 12-11 19 : 03 : 56.664 :
    E/AndroidRuntime (3325) : 원인 : java.lang.NullPointerException
    12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    com.example.artdb.ArtDbHandler.ge tTableColumns (ArtDbHandler.java:182) 12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    com.example.artdb.MediumDAO.setColumns (MediumDAO.java:101)에서 12-11
    (19) : 03 : 56.664 : E/AndroidRuntime (3325) :
    com.example.artdb.ArtDbMainActivity.onCreate (ArtDbMainActivity.java:20) 12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    android.app.Activity.performCreate (Activity.java:5104) 12-11
    19 : 03 : 56.664 : E/AndroidRuntime (3325) :
    android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1080)에서 12-11 19 : 03 : 56.664 : E/AndroidRuntime (3325) : 01에 23, android.app.ActivityThread.performLaunchActivity (ActivityThre

ad.java:2144)

+1

도 게시 할 수 있습니다 cat..okay – Elltz

+0

여기에 logcat이 있습니다. 메인 포스트 – hat

+0

arg로 전달하는'db' 변수를 어떻게 초기화하고 있습니까? – laalto

답변

0

문제가 DB의 초기화되었다. 우리가 질의를하는 순간 데이터베이스가 열리지 않았습니다. 도움말을위한 Thx Elltz와 laalto

0
If (TABLE_INFO_PRAGMA_COLUMNNAME_INDEX != null) String columnName = cursor.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX); 
+0

db.rawQuery가있는 행에서 예외를 throw해야합니다. 우리는이 후에 로그를 가져 오지 않습니다. 그 후에 curser.getString이있는 행이 종료되었습니다. – hat

관련 문제