[英]Else part running even if condition is true in android
我想實現一個系統,當他們注冊時,他們提供他們的用戶名、電話號碼和密碼以及一些其他數據,並且所有這些都被保存到數據庫中。 這樣用戶就可以使用他們的用戶名/電話和密碼登錄
我正在檢查輸入的用戶名和密碼是否等於 firebase 數據庫中的用戶名和密碼,但即使 if 部分為真,它也會運行 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());
}
});
}
}
在 if 語句中if(uname!=null && (uname.equals(Phone) || uphone.equals(Phone)) && upass.equals(Passwd))
這僅在用戶名不等於 null 時才有效,這意味着如果您輸入您描述的 uphone 號碼 username 可能是用戶名/電話號碼,這行不通。 如果我們使用&&
運算符,如果第一個條件失敗,它不會檢查其余的條件,簡單的它會轉到其他條件。 請檢查您的用戶名值。
根據您的解釋重寫 if 語句:
if(((uname!=null && uname.equals(Phone)) || ( uphone !=null|| uphone.equals(Phone))) && upass.equals(Passwd))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.