簡體   English   中英

If 和 else 語句在 java 中的 onClick() 方法中不起作用

[英]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 ,因為尚未輸入任何內容,並且它永遠不會改變。

您應該簡單地將評估enterRequiredFieldspasswordMatching的塊移動到onClick中的createButton ,以便在用戶單擊按鈕時評估這些塊,然后它應該按預期工作。

更新您還需要將用戶名passwordconfirmPassword密碼的引用帶入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條件,因為只有當userNamepasswordconfirmPassword不是空字符串時,條件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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM