在SQLite数据库上执行查询时出现android 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,

我试图从我创建的数据库中读取数据,但在尝试获取所有记录时,我总是会收到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);
}

}

在进行查询之前,您可能需要调用
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();