2012-08-11 6 views
0

이 오류가 발생하여 로그가 도움이되지 않아서 누군가 나를 도울 수 있기를 바랍니다. 나는 내 데이터베이스에서 읽으려고하는데, 내가 추출한 테이블과 데이터를 포함하고있다.Android SQLite SELECT NullPointerException

Cursor mCursor = mDb.rawQuery("SELECT * FROM " + TABLE_SORTBY, null); 

내가 전에이 코드를 사용했지만 내가 잘못 뭘하는지 볼 수 없습니다 그것은 이상한, anyhelp은 기꺼이 감사하겠습니다 :이 라인에 오류가있는 것. 내가 할

/** Get all locations for the dialog box */ 
public ArrayList<String> allLocations() { 
    Cursor mCursor = mDb.rawQuery("SELECT * FROM " + TABLE_SORTBY, null); 
    ArrayList<String> mArrayList = new ArrayList<String>(); 

    try { 
     mCursor.moveToFirst(); 
     while (!mCursor.isAfterLast()) { 
      mArrayList.add(mCursor.getString(mCursor.getColumnIndex(SORTBY_SORTBY_TYPE))); 
      mCursor.moveToNext(); 
     } 
    } catch (SQLiteException e) { 
     Log.e("All Locations", "Error getting locations: " + e.toString()); 
    }finally{ 
     mCursor.close(); 
     close(); 
    } 
    return mArrayList; 
} 

오류는 다음과 같습니다 경우

08-11 14:18:00.465: E/ERROR(19396): java.lang.NullPointerException 
08-11 14:18:00.465: W/System.err(19396): java.lang.NullPointerException 
08-11 14:18:00.465: W/System.err(19396): at com.swiftdrink.sqlite.SortBySQL.allLocations(SortBySQL.java:99) 
08-11 14:18:00.465: W/System.err(19396): at com.swiftdrink.SortByList.displaySortByList(SortByList.java:127) 
08-11 14:18:00.525: D/dalvikvm(19396): GC_FOR_MALLOC freed 2629 objects/147472 bytes in 51ms 
08-11 14:18:00.525: W/System.err(19396): at com.swiftdrink.SortByList.downloadSortBy(SortByList.java:116) 
08-11 14:18:00.525: W/System.err(19396): at com.swiftdrink.SortBy.onCreate(SortBy.java:58) 
08-11 14:18:00.525: W/System.err(19396): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-11 14:18:00.525: W/System.err(19396): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
08-11 14:18:00.525: W/System.err(19396): at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503) 
08-11 14:18:00.535: W/System.err(19396): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
08-11 14:18:00.535: W/System.err(19396): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
08-11 14:18:00.535: W/System.err(19396): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651) 
08-11 14:18:00.535: W/System.err(19396): at android.widget.TabHost.setCurrentTab(TabHost.java:323) 
08-11 14:18:00.535: W/System.err(19396): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129) 
08-11 14:18:00.535: W/System.err(19396): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453) 
08-11 14:18:00.535: W/System.err(19396): at android.view.View.performClick(View.java:2408) 
08-11 14:18:00.535: W/System.err(19396): at android.view.View$PerformClick.run(View.java:8816) 
08-11 14:18:00.535: W/System.err(19396): at android.os.Handler.handleCallback(Handler.java:587) 
08-11 14:18:00.535: W/System.err(19396): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-11 14:18:00.535: W/System.err(19396): at android.os.Looper.loop(Looper.java:123) 
08-11 14:18:00.535: W/System.err(19396): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-11 14:18:00.535: W/System.err(19396): at java.lang.reflect.Method.invokeNative(Native Method) 
08-11 14:18:00.545: W/System.err(19396): at java.lang.reflect.Method.invoke(Method.java:521) 
08-11 14:18:00.545: W/System.err(19396): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-11 14:18:00.545: W/System.err(19396): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-11 14:18:00.545: W/System.err(19396): at dalvik.system.NativeStart.main(Native Method) 

당신이 궁금해하는 것은 내 모든 SQL 클래스입니다.

public class SortBySQL { 

    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase mDb; 
    private final Context mCtx; 

    private static final String sortby = ("CREATE TABLE " + TABLE_SORTBY 
      + " (" + SORTBY_SORTBY_ID + " INT," + SORTBY_SORTBY_TYPE + " TEXT " + ");"); 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(sortby); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_NAME); 
      onCreate(db); 
     } 
    } 

    public SortBySQL(Context ctx) { 
     this.mCtx = ctx; 
    } 

    public SortBySQL open() throws SQLException { 
     this.mDbHelper = new DatabaseHelper(mCtx); 
     this.mDb = this.mDbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     this.mDbHelper.close();  
    } 

    /** Add to the sort by list */ 
    public long addSortBy(String sortByID, String sortByType) { 
     Log.d("addLocation", "FUCK"); 

     Log.d("Add Location", sortByID + " " + sortByType); 

     ContentValues values = new ContentValues(); 

     values.put(SORTBY_SORTBY_ID, sortByID); 
     values.put(SORTBY_SORTBY_TYPE, sortByType); 

     return this.mDb.insert(TABLE_SORTBY , null, values); 
    } 

    /** Get all locations for the dialog box */ 
    public ArrayList<String> allLocations() { 
     Cursor mCursor = mDb.rawQuery("SELECT * FROM " + TABLE_SORTBY, null); 
     ArrayList<String> mArrayList = new ArrayList<String>(); 

     try { 
      mCursor.moveToFirst(); 
      while (!mCursor.isAfterLast()) { 
       mArrayList.add(mCursor.getString(mCursor.getColumnIndex(SORTBY_SORTBY_TYPE))); 
       mCursor.moveToNext(); 
      } 
     } catch (SQLiteException e) { 
      Log.e("All Locations", "Error getting locations: " + e.toString()); 
     }finally{ 
      mCursor.close(); 
      close(); 
     } 
     return mArrayList; 
    } 

    /** Delete all from the location table */ 
    public void deleteAllSortBy() { 
     Log.d("Delete Locations", "Delete Locations"); 
     mDb.delete(TABLE_SORTBY, null, null); 
     close(); 
    } 

    /** Check that there are locations stored */ 
    public boolean countSortBy() { 
     Log.e("countLocation", "countLocation"); 

     Cursor count = mDb.rawQuery("SELECT COUNT(*) FROM " + TABLE_SORTBY, 
       null); 

     if (count == null) { 
      return false; 
     } 
     count.close(); 
     close(); 
     return true; 
    } 
} 
+0

나는 그것이 당신이 생각하는 곳이라고 생각하지 않는다. logcat에서 참조하는 네 줄은 무엇입니까? SortBy 라인 58, SortByList 라인 116, SortByList 라인 127 및 SortBySQL 라인 99 ... – Barak

답변

0

의 경우 쿼리에 문제가 (이 경우에는 정말 보이지 않는), 아마도 아래를 변경해보십시오 :

Cursor mCursor = mDb.query(TABLE_SORTBY, null, null, null, null, 
     null, null, null); 
0

을 나는 당신이를 열려고하는 생각 커서가 열리지 않은 sqlite 데이터베이스에있는 것입니다. 따라서 NullPointerException은 sql 명령을 실행하기 전에 데이터베이스가 만들어지고 열려 있는지 확인하십시오.

-1

컨텍스트

final Context context = this; 
dbhelper = new DatabaseHelper(context); 
+0

어쩌면 약간의 설명과 함께 대답을 살릴 수 있을까요? 왜이 코드가 OP 문제를 해결할 수 있을까요? 지금은 답이별로 유용하지 않은 것 같습니다. – amon