即使条件在android中为真,其他部分仍在运行

时间:2020-09-03 17:02:46

标签: java android

我想实现一个系统,在他们注册时提供他们的用户名,电话号码和密码以及其他一些数据,所有这些数据都保存到数据库中。这样用户就可以使用其用户名/电话和密码登录

我正在检查输入的用户名和密码是否等于firebase数据库中的用户名和密码,但是即使部分为true,它也会运行else部分,请帮助我解决使用finish()和break语句尝试过的问题

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {
    ImageView logo;
    public EditText loginPhone, logInpasswd;
    //Button btnLogIn;
    TextView signup,phonetext,btnLogIn;
    DatabaseReference dbview;
    SessionManager sessionManager;
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        //SessionManager session = new SessionManager(MainActivity.this);
        dbview=FirebaseDatabase.getInstance().getReference("Users");
        logo = (ImageView) findViewById(R.id.imageView);
        logo.animate().rotation(360).start();
        loginPhone = findViewById(R.id.loginPhone);
        logInpasswd = findViewById(R.id.loginpaswd);
        btnLogIn = findViewById(R.id.btnLogIn);
        signup = findViewById(R.id.SignIn);
        logo.setImageResource(R.drawable.mgenomics);
        signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent in = new Intent(MainActivity.this, register.class);
                startActivity(in);
            }
        });
        btnLogIn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
            verifyUser();
            }
        });
    }
    public void verifyUser(){
        sessionManager = new SessionManager(MainActivity.this);

        dbview.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
            for(DataSnapshot data:snapshot.getChildren()) {
                User user = data.getValue(User.class);
                String Phone = loginPhone.getText().toString().trim();
                String Passwd = logInpasswd.getText().toString().trim();
                String uphone = user.getuPhone();
                String upass = user.getuPass();
                String uname = user.getuUname();
                String uid = user.getuID();
                //Bundle data_pass = new Bundle();
                // data_pass.putString("name",uname);

                if(uname!=null && (uname.equals(Phone) || uphone.equals(Phone))  && upass.equals(Passwd)){
                    Intent i = new Intent(MainActivity.this,logged_user.class);
                    sessionManager.saveSession(uname);
                    sessionManager.loginUser(uname,true);
                    startActivity(i);
                    finish();
                    break;
                    }
                else
                {
                    logInpasswd.setError("Invalid Username/Password");
                }

            }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Log.i(TAG, "onCancelled: Error: " + error.getMessage());
            }
        });

    }
}

1 个答案:

答案 0 :(得分:0)

在if语句if(uname!=null && (uname.equals(Phone) || uphone.equals(Phone)) && upass.equals(Passwd))中,只有在用户名不等于null的情况下,此选项才有效。这意味着,如果您输入的uphone号码如您所描述的那样,用户名可以是用户名/电话号码,则不会起作用。如果我们使用&&运算符,如果第一个条件失败,它将不会简单检查其余条件,而是转到其他条件。请检查您的用户名值。

根据您的解释重写了if语句:

 if(((uname!=null && uname.equals(Phone)) || ( uphone !=null|| uphone.equals(Phone)))  && upass.equals(Passwd))