Различные типы пользователей, входящие в приложение Android с базой данных SQLite - PullRequest
1 голос
/ 29 января 2020

Извините, если это глупый вопрос, но я новичок в Android Разработка. Я пытаюсь создать экран входа в систему, который будет направлять врачей на одно мероприятие и медсестер на другое занятие при входе в систему. Это не похоже на работу. Я ввел код в логин. java class:

btLogin.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                String email = loginemail.getText().toString();
                String password = loginpassword.getText().toString();
                Boolean Chkemailpass = db.emailpassword(email, password);
                if(Chkemailpass == true) {
                    Cursor typeofuser;
                    typeofuser = db.checkUser(loginemail.getText().toString()); //get user type from database
                    if(typeofuser.equals("Nurse")) {
                        Intent mainintent = new Intent(Login.this, NurseHome.class);
                        startActivity(mainintent);}
                    else if (typeofuser.equals("Doctor")){
                        Intent intent = new Intent(Login.this, DoctorHome.class);
                        startActivity(intent);}
                    }
                    else
                    Toast.makeText(getApplicationContext(),"Wrong email or password", Toast.LENGTH_SHORT).show();
                }
        });

    }
}

И у меня также есть этот код в классе databasehelper, относящийся к типу пользователя:

public Cursor checkUser(String email) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("SELECT TYPEOFUSER from user_table WHERE EMAIL=email", null);
        return res;
     }

Вся помощь будет оценил, спасибо.

1 Ответ

1 голос
/ 29 января 2020

Аргумент email из checkUser() является строкой, поэтому в вашем операторе sql он должен быть заключен в одинарные кавычки, например:

SELECT TYPEOFUSER from user_table WHERE EMAIL = 'email'

, но правильный способ передачи параметров в rawQuery() с использованием ? заполнителей и использованием второго аргумента в качестве массива строковых параметров (вместо null). Также не возвращайте Cursor, но тип пользователя как String из checkUser(). Поэтому измените это на:

public String checkUser(String email) {
    String result = "";
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery(
        "SELECT TYPEOFUSER from user_table WHERE EMAIL = ?", 
        new String[] {email}
    );
    if (res.moveToNext()) {
        result = res.getString(0);
    }
    res.close();
    return result;
}

и вместо:

Cursor typeofuser;
typeofuser = db.checkUser(loginemail.getText().toString());

используйте это:

String typeofuser = db.checkUser(loginemail.getText().toString());
...