【问题标题】:If/else statement in java is crashing my android app. The if statement works but the else just crashes [duplicate]java中的if/else语句使我的android应用程序崩溃。 if 语句有效,但 else 只是崩溃 [重复]
【发布时间】:2021-05-19 13:50:53
【问题描述】:

当我输入正确的用户名和密码并开始新活动时,我的登录工作正常。但是由于某种原因,当我输入错误的用户名和密码时,它不会继续,应用程序就会崩溃。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myDB = new DBHelper(this);

    EditText txtUser = (EditText) findViewById(R.id.txtUser);
    EditText txtPassword= (EditText) findViewById(R.id.txtPassword);

    Button btnLogin = (Button) findViewById(R.id.btnAdminLogin);
    Button btnCreateAcc = (Button) findViewById(R.id.btnCreateAcc);
    Button btnAdmin = (Button) findViewById(R.id.btnAdmin);

    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            u = new User();
            String username = txtUser.getText().toString();
            String pass = txtPassword.getText().toString();

            u = myDB.readUser(username);

            if(u.getUser().equals(username) && u.getPass().equals(pass)){
                Intent menu = new Intent(getApplicationContext(), MainMenu.class);
                startActivity(menu);
            }
            else {
               Toast.makeText(MainActivity.this, "Incorrect username or password!" + pass, Toast.LENGTH_SHORT).show();
            }

        }
    });

这是在我的 DBhelper 中,readUser。

public User readUser(String user){
    SQLiteDatabase db = this.getReadableDatabase();
    User u =null;
    String where =  col_uname + " = ?";
    String[] selectionArgs = {user};
    Cursor cursor =db.query("tblUser", null, where, selectionArgs, null, null, null);

    try {
        if(cursor.moveToNext()) {
            u = new User();
            u.setUser(cursor.getString(0));
            u.setPass(cursor.getString(4));
            u.setFname(cursor.getString(1));
            u.setMname(cursor.getString(2));
            u.setLname(cursor.getString(3));
            u.setMobile(cursor.getString(6));
            u.setCity(cursor.getString(5));
        }
    } catch(Exception ex) {}

    db.close();
    return u;
}

我不知道我的 if/else 语句做错了什么。请帮忙。

【问题讨论】:

  • 发布崩溃的堆栈跟踪。
  • 永远不要写这样的代码catch(Exception ex) {},如果你捕获到异常处理它。至少记录它们。我猜缓存的异常会告诉你你得到 NPE 的原因。
  • 你正在吞下你的异常并让代码崩溃。

标签: java android sqlite if-statement


【解决方案1】:

你从数据库中读出用户,如果找到这个用户,则返回一个用户对象,否则返回null

u = myDB.readUser(username);

因此,如果找不到用户,您的 u 就是 null。因此会发生 NullPointerException。另见What is a NullPointerException, and how do I fix it?

所以在访问 User 的方法之前,请检查 u 不为空。

u = myDB.readUser(username);

if(u != null /* <- */ && u.getUser().equals(username) && u.getPass().equals(pass)){
  // ...
} else {
  // Toast.makeText(MainActivity.this, "Incorrect username or password!" + pass, Toast.LENGTH_SHORT).show();
}

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2020-07-30
    相关资源
    最近更新 更多