Android 登录页面和注册页面保存用户详细信息不起作用

Android 登录页面和注册页面保存用户详细信息不起作用,android,login,Android,Login,我是android新手。我正在尝试创建一个登录页面,并在数据库中保存用户详细信息。注册活动运作良好。但当我单击登录按钮时,它会出现以下错误:java.lang.NullPointerException:尝试调用虚拟方法“android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String,java.lang.String[],java.lang.String,java.lang.String,j

我是android新手。我正在尝试创建一个登录页面,并在数据库中保存用户详细信息。注册活动运作良好。但当我单击登录按钮时,它会出现以下错误:java.lang.NullPointerException:尝试调用虚拟方法“android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String,java.lang.String[],java.lang.String,java.lang.String,java.lang.String[],java.lang.String,java.lang.String,java.lang.String)“”在空对象引用上 请找个人帮忙

数据库用户详细信息:

public class DatabaseUserDetails extends SQLiteOpenHelper{
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME = "userDetailsDB.db";

private static final String TABLE = "userdeatils";

public static final String COLUMN_USERNAME = "username";
public static final String COLUMN_PASSWORD = "password";
public static final String COLUMN_EMAIL = "emailid";
public  SQLiteDatabase db;

public DatabaseUserDetails(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE_CLASS = "CREATE TABLE  " + TABLE + "(" +
            COLUMN_USERNAME + " " + " TEXT," +
            COLUMN_PASSWORD + " " + " TEXT," +
            COLUMN_EMAIL + " TEXT)";
    Log.d("onCreate",CREATE_TABLE_CLASS);
    db.execSQL(CREATE_TABLE_CLASS);
}

public void insertEntry(String username,String password,String emailid )
{
    ContentValues values = new ContentValues();
    values.put(COLUMN_USERNAME, username);
    values.put(COLUMN_PASSWORD,password);
    values.put(COLUMN_PASSWORD, emailid);
    SQLiteDatabase db = this.getWritableDatabase();
    db.insert(TABLE,null,values);
    Log.d("insertEntry",username);
    Log.d("insertEntry",password);
    db.close();
}
public String getSinlgeEntry(String userName)
{
    Cursor cursor=db.query(TABLE, null, " username=?", new String[]{userName}, null, null, null);
    if(cursor.getCount()<1) // UserName Not Exist
    {
        cursor.close();
        return "NOT EXIST";
    }
    cursor.moveToFirst();
    String password= cursor.getString(cursor.getColumnIndex(COLUMN_PASSWORD));
    cursor.close();
    return password;
}

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

getSinlgeEntry(字符串用户名)
中的查询可能没有返回您需要的内容。对于查询,方法调用如下所示:

query(String table,
      String[] columns,
      String selection,
      String[] selectionArguments,
      String groupBy,
      String having,
      String orderBy)
因此,你应该:

query(TABLE,
      new String[] {COLUMN_USERNAME, COLUMN_PASSWORD},
      COLUMN_USERNAME + " = ? " ,
      new String[] {userName},
      null,
      null,
      null)

这就是说,从我的表中返回用户名和密码,其中用户名值与从方法调用中发送的用户名相同。如果需要更多帮助,请尝试此操作并在下面的注释中告诉我。

如果SQLiteDatabase出现空指针异常,您尚未为其创建实例

SQLiteDatabase db = this.getReadableDatabase();


在getSingleEntry()方法中的db.query()之前添加这些语句。

这就是此代码的用法:

公共SQLiteDatabase db;

这个代码初始化了吗

调用
getSinlgeEntry()

Cursor Cursor=db.query(表,null,“username=?”,新字符串[]{username},null,null,null);

实际上是这个意思~~


但是你的代码中的this.db==null~~~

我按照你说的做了。但是我仍然得到了同样的错误,谢谢你的工作。但是我正在尝试检索用户名和密码,这样用户就可以登录,但它检索的是电子邮件而不是密码。我检查了我的代码,它看起来很好。你能帮我吗?在inserEntry()中方法您将看到您已在列\密码列值中插入了emailId。put(列\密码,emailId);是的,我更正了,但仍然给我相同的错误。他们收到了。只需清理生成项目并清除缓存数据。谢谢
SQLiteDatabase db = this.getReadableDatabase();
SQLiteDatabase db = this.getWritableDatabase();