私はアンドロイドを新しくしました。私は、ログインページを作成し、データベースにユーザーの詳細を保存しようとしています。サインアップアクティビティは正常に動作します。しかし、私はログインボタンをクリックすると、次のエラーが表示されます:java.lang.NullPointerException:仮想メソッド 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String、java.lang nullオブジェクト参照 に「[]、java.lang.Stringで、java.lang.Stringで[]、java.lang.Stringで、java.lang.Stringで、java.lang.String)を.Stringすることは、誰かが助けることができます。ログインページとサインアップページは、ユーザーの詳細を保存しないでください
DatabaseUserDetails:
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);
}
LoginActivity.java
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String struserName = mUsername.getText().toString();
String strpassword = mPassword.getText().toString();
DatabaseUserDetails dbuserdeatils = new DatabaseUserDetails(getBaseContext(),null,null,1);
String storedPassword = dbuserdeatils.getSinlgeEntry(struserName);
if(strpassword.equals(storedPassword)) {
Toast.makeText(LoginActivity.this,"Welcome home"+struserName,Toast.LENGTH_LONG).show();
//Go to homepage
Intent intent = new Intent(LoginActivity.this, HomePageActivity.class);
startActivity(intent);
}else{
Toast.makeText(LoginActivity.this,"Username and passwords do not match",Toast.LENGTH_LONG).show();
}
}
});
ありがとうございました。しかし、私はユーザー名とパスワードを取得して、ユーザーがログインできるようにしようとしていますが、パスワードの代わりに電子メールを取得しています。私は自分のコードをチェックして、私にはうまく見えます。どうすれば助けてくれますか? – PersianBlue
inserEntry()メソッドでは、COLUMN_PASSWORD列values.putにemailIdを挿入したことがわかります.put(COLUMN_PASSWORD、emailid); –
ええ、私はそれを修正しましたが、それでも私に同じエラーを与えます – PersianBlue