2012-04-09 64 views
4

我試圖從我創建的數據庫中讀取數據,但是在嘗試獲取所有記錄時,我總是得到一個NullPointerException。在SQLite數據庫上執行查詢時出現NullPointerException

我幾乎從另一個應用程序中拷貝了代碼,我已經完美運行了,但不知何故,我在這裏做錯了。

的NullPointerException異常是在

return mDb.query(DATABASE_TABLE_LOCALLOGIN, new String[] {LOCALLOGIN_ID, LOCALLOGIN_LOGIN, LOCALLOGIN_PASSWORD}, null, null, null, null, null); 

行下面是相關的代碼(不介意字符串數組,其後來添加表: GoingOutDbAdapter.java

public class GoingOutDbAdapter { 
private static final String DATABASE_NAME = "GoingOutData"; 
private static final String DATABASE_TABLE_LOCALLOGIN = "LocalLogin"; 

public static final String LOCALLOGIN_ID = "LocalLogin_id"; 
public static final String LOCALLOGIN_LOGIN = "Login"; 
public static final String LOCALLOGIN_PASSWORD = "Password"; 

private static final String TAG = "Debugstring"; 

private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 

private static final String[] DATABASE_CREATE = { 
    "CREATE Table " + DATABASE_TABLE_LOCALLOGIN + " (" 
    + LOCALLOGIN_ID + " integer PRIMARY KEY Autoincrement, " 
    + LOCALLOGIN_LOGIN + " text NOT NULL, " 
    + LOCALLOGIN_PASSWORD + " text NOT NULL);"}; 

private final Context mCtx; 

private static class DatabaseHelper extends SQLiteOpenHelper { 
    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     for(int i = 0; i < DATABASE_CREATE.length; i++){ 
      Log.d(TAG,DATABASE_CREATE[i]); 
      db.execSQL(DATABASE_CREATE[i]); 
     } 
    } 
} 

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

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

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

public Cursor fetchAllLocalLogins() { 
    return mDb.query(DATABASE_TABLE_LOCALLOGIN, new String[] {LOCALLOGIN_ID, LOCALLOGIN_LOGIN, LOCALLOGIN_PASSWORD}, null, null, null, null, null); 
} 

} 

MyActivity .java,我叫fetchAllLocalLogins

public class MyActivity extends Activity { 
/** Called when the activity is first created. */ 

private GoingOutDbAdapter mDbHelper; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    mDbHelper = new GoingOutDbAdapter(this); 

    setContentView(R.layout.main); 

Cursor localLogin = mDbHelper.fetchAllLocalLogins(); 

} 
} 
+0

在這裏發表您的logcat – 2012-04-09 09:06:53

回答

11

你會大概要調用的方法open()您進行查詢之前:

//... 
mDbHelper.open(); //whitout this call mdb will be NULL 
Cursor localLogin = mDbHelper.fetchAllLocalLogins(); 
+0

這樣做,現在我得到 「android.database.CursorIndexOutOfBoundsException:指數-1要求,尺寸爲1」「mLoginField.setText(localLogin.getString(localLogin.getColumnIndexOrThrow(GoingOutDbAdapter.LOCALLOGIN_LOGIN) ));」在我的內容視圖中使用mLoginField作爲EditText – 2012-04-09 09:41:08

+0

@MatsRaemen從查詢返回的'Cursor'位於'-1'處,因此您應該在調用'localLogin.moveToFirst()'或'localLogin.moveToNext()'之前你試圖獲取數據。 – Luksprog 2012-04-09 09:43:16

+0

你又救了我,非常感謝! – 2012-04-09 09:59:30

1

你應該執行數據庫操作之前打開數據庫。 mDbHelper.open();

相關問題