[英]If and else statements not working in onClick() method in java
嘿,我是 android 工作室的初學者,我剛剛開始構建 android 應用程序。現在我正在使用 java 構建應用程序如果密碼和重新輸入密碼不匹配,則必須在屏幕上顯示相應的敬酒消息。但如果這些情況都沒有發生,我只是希望用戶繼續進行下一個活動(點擊按鈕)。但是問題是當我測試應用程序時,我在給定字段中輸入了所有必需的信息,並且兩個密碼也是正確的,但是我的應用程序沒有顯示下一個活動,而是重復顯示第一個 toast 消息。我已經卡在這里很長時間了.我也嘗試更改 if-else 語句,但沒有任何效果。有人可以幫我解決這些問題如何運行我的應用程序嗎?我的代碼列在下面
package com.example.oneclickscanner;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class AccountActivity extends AppCompatActivity {
TextView accountLogo;
EditText edtUsername,edtPassword,edtConfirmPassword;
Button createButton,exitButton;
String userName = edtUsername.getText().toString();
String password = edtPassword.getText().toString();
String confirmPassword = edtConfirmPassword.getText().toString();
boolean enterRequiredFields = false;
boolean passwordMatching = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
accountLogo = findViewById(R.id.accountLogo);
edtUsername = findViewById(R.id.edtUsername);
edtPassword = findViewById(R.id.edtPassword);
edtConfirmPassword = findViewById(R.id.edtConfirmPassword);
createButton = findViewById(R.id.createButton);
exitButton = findViewById(R.id.exitButton);
createButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(userName.equals("") || password.equals("") || confirmPassword.equals("")){
enterRequiredFields = true;
}else if(!userName.equals("") || !password.equals("") || !confirmPassword.equals("")){
enterRequiredFields = false;
}
if(!password.equals(confirmPassword)){
passwordMatching = false;
}else{
passwordMatching = true;
}
if(enterRequiredFields){
Toast.makeText(AccountActivity.this,"Please Enter the required Fields",Toast.LENGTH_SHORT).show();
}else if(!passwordMatching) {
Toast.makeText(AccountActivity.this,"Password don't Match",Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent(AccountActivity.this,ModelAndLicenseInfo.class);
startActivity(intent);
}
}
});
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(AccountActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
}
}
這是因為評估enterRequiredFields
的代碼塊位於OnCreate
塊內 - 這意味着它在啟動時評估為true
,因為尚未輸入任何內容,並且它永遠不會改變。
您應該簡單地將評估enterRequiredFields
和passwordMatching
的塊移動到onClick
中的createButton
,以便在用戶單擊按鈕時評估這些塊,然后它應該按預期工作。
更新您還需要將用戶名password
和confirmPassword
密碼的引用帶入userName
OnClick block
中,如下所示:
package com.example.oneclickscanner;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class AccountActivity extends AppCompatActivity {
TextView accountLogo;
EditText edtUsername,edtPassword,edtConfirmPassword;
Button createButton,exitButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
accountLogo = findViewById(R.id.accountLogo);
edtUsername = findViewById(R.id.edtUsername);
edtPassword = findViewById(R.id.edtPassword);
edtConfirmPassword = findViewById(R.id.edtConfirmPassword);
createButton = findViewById(R.id.createButton);
exitButton = findViewById(R.id.exitButton);
createButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userName = edtUsername.getText().toString();
String password = edtPassword.getText().toString();
String confirmPassword = edtConfirmPassword.getText().toString();
boolean enterRequiredFields = false;
boolean passwordMatching = true;
if(userName.equals("") || password.equals("") || confirmPassword.equals("")){
enterRequiredFields = true;
}else if(!userName.equals("") || !password.equals("") || !confirmPassword.equals("")){
enterRequiredFields = false;
}
if(!password.equals(confirmPassword)){
passwordMatching = false;
}else{
passwordMatching = true;
}
if(enterRequiredFields){
Toast.makeText(AccountActivity.this,"Please Enter the required Fields",Toast.LENGTH_SHORT).show();
}else if(!passwordMatching) {
Toast.makeText(AccountActivity.this,"Password don't Match",Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent(AccountActivity.this,ModelAndLicenseInfo.class);
startActivity(intent);
}
}
});
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(AccountActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
}
}
按照@Jimmy 的回答,您還需要修改else-if
條件,因為只有當userName
、 password
和confirmPassword
不是空字符串時,條件enterRequiredFields
應該設置為false
。
從,
else if(!userName.equals("") || !password.equals("") || !confirmPassword.equals("")){
enterRequiredFields = false;
}
至,
else if(!userName.equals("") && !password.equals("") && !confirmPassword.equals("")){
enterRequiredFields = false;
}
因此,不要在 onCreate 中檢查您的編輯文本,而是這樣做。 還可以使用 TextUtils 從 Edittext 中獲取准確的空字符串檢查,就像這樣。
createButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(TextUtils.isEmpty(userName)|| TextUtils.isEmpty(password) || TextUtils.isEmpty(confirmPassword)){
enterRequiredFields = true;
}else if(!TextUtils.isEmpty(userName) || !TextUtils.isEmpty(password) || !TextUtils.isEmpty(confirmPassword)){
enterRequiredFields = false;
}
if(!password.equals(confirmPassword)){
passwordMatching = false;
}else{
passwordMatching = true;
}
if(enterRequiredFields){
Toast.makeText(AccountActivity.this,"Please Enter the required Fields",Toast.LENGTH_SHORT).show();
}else if(!passwordMatching) {
Toast.makeText(AccountActivity.this,"Password don't Match",Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent(AccountActivity.this,ModelAndLicenseInfo.class);
startActivity(intent);
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.