我在android studio的代码中遇到了逻辑问题

时间:2016-01-16 09:03:11

标签: android mysql

此代码应该是故意提供的,以验证已添加到"配置文件"的数据库中的电子邮件地址。之前没有输入过。在用户输入相关数据并尝试将数据验证为合法条目后,将根据数据库中的其他条目检查电子邮件地址(因为电子邮件通常是昵称以外的一组条目中最独特的部分)和如果电子邮件对数据库是唯一的,则接受该条目并在数据库中创建新列(它是)。问题是电子邮件总是被接受为唯一的。

此代码显示如何删除条目以确保它们符合注册表的约定

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 个答案:

答案 0 :(得分:1)

尝试重写您的查询,同时确保emailEntry不是null

 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
}