Невозможно использовать логические значения в операторах IF - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть база данных, которая проверяется с помощью курсора. Эта база данных сравнивает данные в базе данных с введенными пользователем именем пользователя и паролем. Если они соответствуют данным в базе данных, логическое значение возвращается true. Я могу использовать тост, чтобы вывести логическое значение, которое правильно выводит как true или false, если входные данные совпадают или не совпадают.

Однако я пытаюсь использовать логическое значение для перехода к следующему действию. Если логическое значение истинно, запускается следующее намерение. По какой-то причине это не работает, и я не могу понять, почему. Любая помощь будет отличной. Спасибо!

public Button btnLogin, btnSignup;
public EditText UsernameInput, PasswordInput;
public DatabaseHelper db;
public static String passUser, passPass, passFirst, passSecond;
public int count;
public Boolean matchingUser = false;

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

    // Align page and remove notification bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

    // Define everything
    btnLogin =  findViewById(R.id.btnLogin);
    btnSignup =  findViewById(R.id.btnSignup);
    UsernameInput =  findViewById(R.id.UsernameInput);
    PasswordInput =  findViewById(R.id.PasswordInput);
    db = new DatabaseHelper(this);

    // validation button
    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            validateLogin(UsernameInput.getText().toString(), PasswordInput.getText().toString());
        }
    });
    btnSignup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CreateUser();
        }
    });
}
// Validation code
public void validateLogin(String userName, String userPassword)
{
    if (userName.equals("")|| userPassword.equals(""))
    {
        Toast.makeText(getApplicationContext(),"Fields are empty",Toast.LENGTH_SHORT).show();
    }
    else
    {
        // CHECKING USER LOGIN DETAILS
        Cursor cursor = db.CompareUserData();
        for (count = 0; count<=cursor.getCount();count++)
        {
            if (cursor.moveToPosition(count))
            {
                if (UsernameInput.getText().toString().equals(cursor.getString(0))&&PasswordInput.getText().toString().equals(cursor.getString(1)))
                {
                    matchingUser = true;
                }
            }

            Toast.makeText(this, "boolean : "+ matchingUser, Toast.LENGTH_SHORT).show();

            if (matchingUser = true)
            {
                passUser = cursor.getString(0);
                passPass = cursor.getString(1);
                passFirst = cursor.getString(2);
                passSecond = cursor.getString(3);

                getUser();
                getPass();
                getFirst();
                getSecond();

                Toast.makeText(getApplicationContext(), "Successfully logged in", Toast.LENGTH_SHORT).show();
                LoginValidation(); 
            }

            if (matchingUser = false)
            {
                Toast.makeText(getApplicationContext(),"Incorrect Username",Toast.LENGTH_SHORT).show();
            }}
    }
}
private void LoginValidation()
{
    // Changing activity code
    startActivity(new Intent(MainActivity.this,Login_Biometrics.class));
}
private void CreateUser()
{
    // Changing activity code
    startActivity(new Intent(MainActivity.this,createUser.class));
}
public static String getUser ()
{

    return passUser;
}
public static String getPass ()
{


    return passPass;
}
public static String getFirst ()
{

    return passFirst;
}
public static String getSecond ()
{


    return passSecond;


}

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы должны понимать некоторые основы:

Оператор присваивания =

Используется для присвоения значения некоторой переменной.

Логический оператор ==

Используется для логического сравнения.

Поэтому вместо этого:

if (matchingUser = true)
{
...

Сделайте это

if (matchingUser == true)
{
...

Применяйте это для каждой проверки условий в вашем коде.

1 голос
/ 17 апреля 2020

Это не будет работать с одним = знак равенства, просто сделайте:

if(matchingUser) {
  // if true do something
} else {
  // if false do something
}

В вашем случае:

if (matchingUser) {
   passUser = cursor.getString(0);
   passPass = cursor.getString(1);
   passFirst = cursor.getString(2);
   passSecond = cursor.getString(3);

   getUser();
   getPass();
   getFirst();
   getSecond();
   Toast.makeText(getApplicationContext(), "Successfully logged in",Toast.LENGTH_SHORT).show();
   LoginValidation(); 
} else {
   Toast.makeText(getApplicationContext(),"Incorrect Username",Toast.LENGTH_SHORT).show();
}
...