这段代码应该是有意为之,以验证已添加到“配置文件”数据库的电子邮件地址之前没有输入过。用户输入相关数据并尝试将数据验证为合法条目后,会根据数据库中的其他条目检查电子邮件地址(因为电子邮件通常是昵称以外的一组条目中最独特的部分)和如果电子邮件对于数据库是唯一的,则该条目将被接受,并且应该在数据库中创建一个新列(它是)。问题在于电子邮件始终被认为是唯一的。我在android studio的代码中遇到了问题
这段代码显示的条目是如何淘汰,以确保它们符合报名表
public void registerAccount(View view) {
LoginEntries entries = new LoginEntries(
newEmailAddressInput.getText().toString(),
newPasswordInput.getText().toString(),
newFirstNameInput.getText().toString(),
newLastNameInput.getText().toString(),
newNickname.getText().toString(),fullPhoneNumber);
String isTempEmail = newEmailAddressInput.getText().toString();
String isTempPass = newPasswordInput.getText().toString();
String confirmPasswordHolder = confirmNewPasswordInput.getText().toString();
if (TextUtils.isEmpty(isTempEmail) && TextUtils.isEmpty(isTempPass)) {
Toast.makeText(this, "Enter Email and Password", Toast.LENGTH_LONG).show();
newEmailAddressInput.setText("");
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
} else if (TextUtils.isEmpty(isTempEmail) && !TextUtils.isEmpty(isTempPass)) {
Toast.makeText(this, "Enter Email", Toast.LENGTH_LONG).show();
newEmailAddressInput.setText("");
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
} else if (!TextUtils.isEmpty(isTempEmail) && TextUtils.isEmpty(isTempPass)) {
Toast.makeText(this, "Enter Password", Toast.LENGTH_LONG).show();
newEmailAddressInput.setText("");
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
} /*Temporary while app is offline, when app will be operational, different prompt will search web to verify email address*/
else if (!isTempEmail.endsWith("@gmail.com") && !isTempEmail.endsWith("@yahoo.com") && !isTempEmail.endsWith("@aol.com") && !isTempEmail.endsWith("@hotmail.com")) {
Toast.makeText(this, "Not a valid email address, trying again", Toast.LENGTH_LONG).show();
newEmailAddressInput.setText("");
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
} else if (!dbHandler.signUpEmailCheck(isTempEmail)) {
Toast.makeText(this, "Email used, please try again", Toast.LENGTH_LONG).show();
newEmailAddressInput.setText("");
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
} else if (!confirmPasswordHolder.equals(isTempPass)) {
Toast.makeText(this, "Passwords don't match!", Toast.LENGTH_LONG).show();
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
areaCodeInput.setText("");
firstThreeDigitsInput.setText("");
finalFourDigitsInput.setText("");
} else{
Toast.makeText(this, "Saved!", Toast.LENGTH_LONG).show();
dbHandler.addEntry(entries);// adds entries to database
printDatabase();
}
}
的规定,这个代码,这是上面的方法就在眼前的问题。当电子邮件移交给此代码时,它会从数据库处理程序类中调用以下方法。
else if (!dbHandler.signUpEmailCheck(isTempEmail)) {
Toast.makeText(this, "Email used, please try again", Toast.LENGTH_LONG).show();
newEmailAddressInput.setText("");
newPasswordInput.setText("");
confirmNewPasswordInput.setText("");
该方法以电子邮件条目,并使用它来调用任何及所有其他条目名称相同(据我了解它的工作,我可能是错这就是为什么我写了这个问题) 如果getColumnCount()函数不为零,该方法返回true,这表明if语句为false,它指示用户使用另一封电子邮件。这绝不会发生。我已经尝试了不同的真实,虚假回报,但没有一个组合导致正确的结论。
public boolean signUpEmailCheck(String emailEntry){
//checks if a new email entry already exists in the database
Integer holder;
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_EMAILADDRESS + "=\"" + emailEntry + "\"";
Cursor c = db.rawQuery(query,null);
holder = c.getColumnCount();
if (holder > 0) {
db.close();
c.close();
return true;
} else {
db.close();
c.close();
return false;
}
}
这是被称为将数据输入到数据库中
public void addEntry(LoginEntries entry){
ContentValues values = new ContentValues();
values.put(COLUMN_EMAILADDRESS,entry.get_emailAddress());
values.put(COLUMN_PASSWORD,entry.get_password());
values.put(COLUMN_FIRSTNAME,entry.get_firstName());
values.put(COLUMN_LASTNAME,entry.get_lastName());
values.put(COLUMN_PHONENUMBER,entry.get_phoneNumber());
values.put(COLUMN_NICKNAME,entry.get_nickname());
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_LOGINENTRIES, null, values);
db.close();
}
谢谢。我终于可以继续讨论其他50个bug了。 一个问题,!c.moveToFirst()怎么玩? –
如果光标为空,'moveToFirst()'将返回false。如果它帮助你解决问题,请接受我的回答。 – cylon
谢谢你的帮助。我已经做了。 –