Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If和else语句在java的onClick()方法中不起作用_Java_Android Studio_Onclicklistener - Fatal编程技术网

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

If和else语句在java的onClick()方法中不起作用,java,android-studio,onclicklistener,Java,Android Studio,Onclicklistener,嘿,我是android studio的初学者,我刚刚开始构建android应用程序。现在我正在使用java构建一个应用程序,其中要求用户在使用应用程序之前创建一个帐户。如果用户单击“创建”按钮且必填字段为空,或者如果密码和重新输入密码不匹配,必须在屏幕上显示相应的toast消息。但如果这两种情况都没有发生,我只想让用户转到下一个活动(单击按钮)。但问题是,当我测试应用程序时,我在给定字段中输入了所有必需的信息,两个密码都正确,但没有显示下一个活动,我的应用程序反复显示第一条toast消息。我已被

嘿,我是android studio的初学者,我刚刚开始构建android应用程序。现在我正在使用java构建一个应用程序,其中要求用户在使用应用程序之前创建一个帐户。如果用户单击“创建”按钮且必填字段为空,或者如果密码和重新输入密码不匹配,必须在屏幕上显示相应的toast消息。但如果这两种情况都没有发生,我只想让用户转到下一个活动(单击按钮)。但问题是,当我测试应用程序时,我在给定字段中输入了所有必需的信息,两个密码都正确,但没有显示下一个活动,我的应用程序反复显示第一条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
,以便在用户单击按钮时对其进行计算,然后它应按预期工作

更新 您还需要将
用户名
密码
确认密码
的引用带入
OnClick块
,如下所示:

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
条件,因为只有当
用户名
密码
确认密码
不是空字符串时,条件
输入要求字段
才应设置为

对,


因此,与其在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);
            }

        }
    });

在onClick()方法中添加coide块后,应用程序正在崩溃。以下消息显示“很遗憾,您的应用程序已停止”,虽然Android Studio内部没有显示任何错误。是的,当然。我已经通过编辑我之前的问题发布了更新的代码。请检查。谢谢-你需要在onclick块中拉出每个edittext控件内的文本,我已经发布了基于你的更新代码,试试看是否有效?如果没有,请提供您的IDE(logcat If Android Studio)提供的错误,谢谢兄弟。它工作得很好。此外,我在If-else语句中使用AND操作,因为我想显示toast消息,即使其中一个字段为空。现在我已经发现了我的错误。
   else if(!userName.equals("") && !password.equals("") && !confirmPassword.equals("")){
        enterRequiredFields = false;
   }

    
      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);
            }

        }
    });