2016-01-16 53 views
0

这段代码应该是有意为之,以验证已添加到“配置文件”数据库的电子邮件地址之前没有输入过。用户输入相关数据并尝试将数据验证为合法条目后,会根据数据库中的其他条目检查电子邮件地址(因为电子邮件通常是昵称以外的一组条目中最独特的部分)和如果电子邮件对于数据库是唯一的,则该条目将被接受,并且应该在数据库中创建一个新列(它是)。问题在于电子邮件始终被认为是唯一的。我在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(); 
} 

回答

1

尝试重写查询这样的方法,也请务必emailEntrynull

String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_EMAILADDRESS + "=?"; 
Cursor c = db.rawQuery(query, new String[] { emailEntry }); 

也只是检查光标是空的,下面的方法:

if(!c.moveToFirst() || c.getCount() == 0){ 
    ... 
    return true; // cursor is empty, the email doesn't exist 
}else{ 
    return false; // cursor is not empty, the email exists 
} 
+0

谢谢。我终于可以继续讨论其他50个bug了。 一个问题,!c.moveToFirst()怎么玩? –

+0

如果光标为空,'moveToFirst()'将返回false。如果它帮助你解决问题,请接受我的回答。 – cylon

+0

谢谢你的帮助。我已经做了。 –