If和else语句在java的onClick()方法中不起作用
嘿,我是android studio的初学者,我刚刚开始构建android应用程序。现在我正在使用java构建一个应用程序,其中要求用户在使用应用程序之前创建一个帐户。如果用户单击“创建”按钮且必填字段为空,或者如果密码和重新输入密码不匹配,必须在屏幕上显示相应的toast消息。但如果这两种情况都没有发生,我只想让用户转到下一个活动(单击按钮)。但问题是,当我测试应用程序时,我在给定字段中输入了所有必需的信息,两个密码都正确,但没有显示下一个活动,我的应用程序反复显示第一条toast消息。我已被困在这里很长时间。我也尝试更改if-else语句,但没有任何效果。有人可以帮助我如何运行我的应用程序来解决这些问题吗?我的代码如下所示If和else语句在java的onClick()方法中不起作用,java,android-studio,onclicklistener,Java,Android Studio,Onclicklistener,嘿,我是android studio的初学者,我刚刚开始构建android应用程序。现在我正在使用java构建一个应用程序,其中要求用户在使用应用程序之前创建一个帐户。如果用户单击“创建”按钮且必填字段为空,或者如果密码和重新输入密码不匹配,必须在屏幕上显示相应的toast消息。但如果这两种情况都没有发生,我只想让用户转到下一个活动(单击按钮)。但问题是,当我测试应用程序时,我在给定字段中输入了所有必需的信息,两个密码都正确,但没有显示下一个活动,我的应用程序反复显示第一条toast消息。我已被
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);
}
}
});