【问题标题】:Wrong password/email error authentication activity - with SQLite错误的密码/电子邮件错误身份验证活动 - 使用 SQLite
【发布时间】:2018-07-12 06:18:59
【问题描述】:

Onclick() 方法有什么问题?还是verifyFromSqlite()?尝试使用刚刚提供给注册表单的数据登录,为什么按下登录按钮的输出只是密码/电子邮件错误的错误?

 public class LoginActivity extends AppCompatActivity implements View.OnClickListener{

private final AppCompatActivity activity = LoginActivity.this;

private NestedScrollView nestedScrollView;

private TextInputLayout textInputLayoutEmail;
private TextInputLayout textInputLayoutPassword;

private TextInputEditText textInputEditTextEmail;
private TextInputEditText textInputEditTextPassword;

private AppCompatButton appCompatButtonLogin;

private AppCompatTextView textViewLinkRegister;

private InputValidation inputValidation;
private DatabaseHelper databaseHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getSupportActionBar().hide();


    initViews();
    initListeners();
    initObjects();


}
private void initViews(){
    nestedScrollView = (NestedScrollView) findViewById(R.id.nestedScrollView);

    textInputLayoutEmail= (TextInputLayout) findViewById(R.id.textInputLayoutEmail);
    textInputLayoutPassword= (TextInputLayout) findViewById(R.id.textInputLayoutPassword);

    textInputEditTextEmail=(TextInputEditText) findViewById(R.id.textInputEditTextEmail);
    textInputEditTextPassword=(TextInputEditText) findViewById(R.id.textInputEditTextPassword);

    appCompatButtonLogin = (AppCompatButton) findViewById(R.id.appCompatButtonLogin);
    textViewLinkRegister= (AppCompatTextView) findViewById(R.id.textViewLinkRegister);
}

private void initListeners(){
    appCompatButtonLogin.setOnClickListener(this);
    textViewLinkRegister.setOnClickListener(this);
}

private void initObjects(){
    databaseHelper = new DatabaseHelper(activity);
    inputValidation = new InputValidation(activity);
}

@Override
public void onClick(View v){
    switch (v.getId()){
        case R.id.appCompatButtonLogin:
            verifyFromSQLite();
            break;

        case R.id.textViewLinkRegister:
            Intent intentRegister = new Intent(getApplicationContext(), RegisterActivity.class);
            startActivity(intentRegister);
            break;
    }
}

private void verifyFromSQLite(){
    if (!inputValidation.isInputEditTextFilled(textInputEditTextEmail, textInputLayoutEmail, getString(R.string.error_message_email))){
        return;

    }
    if (!inputValidation.isInputEditTextEmail(textInputEditTextEmail, textInputLayoutEmail, getString(R.string.error_message_email))){
        return;
    }

    if (!inputValidation.isInputEditTextFilled(textInputEditTextPassword, textInputLayoutPassword, getString(R.string.error_message_password))){
        return;
    }

    if(databaseHelper.checkUser(textInputEditTextEmail.getText().toString().trim()
            , textInputEditTextPassword.getText().toString().trim())){
        Intent accountsIntent = new Intent(activity, UsersActivity.class);
        accountsIntent.putExtra("EMAIL", textInputEditTextEmail.getText().toString().trim());
        emptyInputEditText();
        startActivity(accountsIntent);
    } else {
        Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
    }
}

private void emptyInputEditText(){
    textInputEditTextEmail.setText(null);
    textInputEditTextPassword.setText(null);
}
}

我认为这里会做错事。

 if(databaseHelper.checkUser(textInputEditTextEmail.getText().toString().trim()
            , textInputEditTextPassword.getText().toString().trim())){
        Intent accountsIntent = new Intent(activity, UsersActivity.class);
        accountsIntent.putExtra("EMAIL", textInputEditTextEmail.getText().toString().trim());
        emptyInputEditText();
        startActivity(accountsIntent);
    } else {
        Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
    }
}

请让我知道我做错了什么,因为我已经尝试了所有其他答案,但它不会点击我:) 为什么在注册并尝试登录后会出现错误消息?

【问题讨论】:

    标签: database sqlite authentication android-sqlite


    【解决方案1】:

    假设 checkUser 方法与您之前的 question 没有变化,即:-

    public boolean checkUser(String password, String email){
        String[] columns = {
                COLUMN_USER_ID
        };
        SQLiteDatabase db= this.getWritableDatabase();
        String selection = COLUMN_USER_EMAIL + " = ? " + "AND "+ COLUMN_USER_PASSWORD+" =? ";
        String[] selectionArgs = { email,password };
    
        Cursor cursor = db.query(TABLE_USER,
                columns,
                selection,
                selectionArgs,
                null,
                null,
                null);
        int cursorCount = cursor.getCount();
        cursor.close();
        db.close();
    
        if(cursorCount > 0){
            return true;
        }
        return false;
     }
    

    然后您将电子邮件作为密码和密码作为电子邮件传递。尝试改变:-

    if(databaseHelper.checkUser(textInputEditTextEmail.getText().toString().trim()
                , textInputEditTextPassword.getText().toString().trim())){
            Intent accountsIntent = new Intent(activity, UsersActivity.class);
            accountsIntent.putExtra("EMAIL", textInputEditTextEmail.getText().toString().trim());
            emptyInputEditText();
            startActivity(accountsIntent);
        } else {
            Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
        }
    }
    

    到:-

    if(databaseHelper.checkUser( textInputEditTextPassword.getText().toString().trim()
                ,textInputEditTextEmail.getText().toString().trim())){
            Intent accountsIntent = new Intent(activity, UsersActivity.class);
            accountsIntent.putExtra("EMAIL", textInputEditTextEmail.getText().toString().trim());
            emptyInputEditText();
            startActivity(accountsIntent);
        } else {
            Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
        }
    }
    

    【讨论】:

    • 不,先生,它不起作用,我认为您发布了完全相同的代码进行更改。有什么变化,因为我看不到吗?有相同的电子邮件或密码错误..它不会保存我的注册数据..
    • @LaviniaRotaru 不同之处在于调用checkUser方法的第一个参数是密码(textInputEditTextPassword.getText().toString().trim())而不是电子邮件,电子邮件(textInputEditTextEmail.getText().toString().trim())是第二个参数与密码相反,因为 checkUser 方法的签名为 password, email 而不是 email,password。
    猜你喜欢
    • 2019-08-05
    • 2021-06-12
    • 2021-11-14
    • 1970-01-01
    • 2017-08-06
    • 2015-11-23
    • 2016-11-20
    • 2017-01-30
    • 2016-12-27
    相关资源
    最近更新 更多