我想实现一个系统,在他们注册时提供他们的用户名,电话号码和密码以及其他一些数据,所有这些数据都保存到数据库中。这样用户就可以使用其用户名/电话和密码登录
我正在检查输入的用户名和密码是否等于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());
}
});
}
}
答案 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))