在SQLite数据库上执行查询时出现android NullPointerException
我试图从我创建的数据库中读取数据,但在尝试获取所有记录时,我总是会收到NullPointerException 实际上,我复制粘贴了另一个运行完美的应用程序的代码,但不知何故,我在这里做得不对 NullPointerException位于在SQLite数据库上执行查询时出现android NullPointerException,android,sqlite,nullpointerexception,Android,Sqlite,Nullpointerexception,我试图从我创建的数据库中读取数据,但在尝试获取所有记录时,我总是会收到NullPointerException 实际上,我复制粘贴了另一个运行完美的应用程序的代码,但不知何故,我在这里做得不对 NullPointerException位于 return mDb.query(DATABASE_TABLE_LOCALLOGIN, new String[] {LOCALLOGIN_ID, LOCALLOGIN_LOGIN, LOCALLOGIN_PASSWORD}, null, null, null,
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);
}
}
在进行查询之前,您可能需要调用
open()
方法:
//...
mDbHelper.open(); //whitout this call mdb will be NULL
Cursor localLogin = mDbHelper.fetchAllLocalLogins();
您应该在执行数据库操作之前打开数据库。
mDbHelper.open();做到了这一点,现在我在“mLoginField.setText(localLogin.getString(localLogin.getColumnIndexOrThrow(GoingOutDbAdapter.localLogin\u LOGIN))”处得到了“android.database.cursorindexoutboundsException:Index-1请求,大小为1”在我的contentview@MatsRaemen从查询返回的
光标位于-1
,因此应始终调用localLogin.moveToFirst()
或localLogin.moveToNext()
在尝试获取数据之前。很容易忘记打开它…我构建了一个在构造函数中打开的帮助器类:)
//...
mDbHelper.open(); //whitout this call mdb will be NULL
Cursor localLogin = mDbHelper.fetchAllLocalLogins();