代码没有错误,但按钮不执行任何操作

There is no error in the code but the button doesn't perform any action

我正在开发一个登录和注册应用程序。该应用程序应该在登录或注册时检查输入的数据是否正确。登录验证工作正常,但注册不验证数据。注册按钮应该在点击后检查验证,但当我点击它时没有任何反应。 android studio 中没有显示任何错误,应用运行正常。

package com.example.investas;
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 RegisterActivity extends AppCompatActivity {

private EditText inputUsername,inputEmail,inputPassword,inputCpassword;
Button btnRegister;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    TextView btn=findViewById(R.id.alreadyHaveAccount);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            TextView btn=findViewById(R.id.alreadyHaveAccount);
            inputUsername=findViewById(R.id.inputUsername);
            inputEmail=findViewById(R.id.inputEmail);
            inputPassword=findViewById(R.id.inputPassword);
            inputCpassword=findViewById(R.id.inputCpassword);
            btnRegister=findViewById(R.id.btnRegister);
            btnRegister.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    validations();
                }
            });
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    startActivity(new Intent(RegisterActivity.this,LoginActivity.class));
                }
            });
        }
    });

}

 private void validations() {
    String username=inputUsername.getText().toString();
    String email=inputEmail.getText().toString();
    String password=inputPassword.getText().toString();
    String cpassword=inputCpassword.getText().toString();

    if(username.isEmpty() || username.length()<7)
    {
        showError(inputUsername,"Your username is not valid");
    }
    else if(email.isEmpty() || !email.contains("@"))
    {
        showError(inputEmail,"Email is not valid");
    }
    else if(password.isEmpty() || password.length()<7)
    {
        showError(inputPassword,"Password must be 7 characters");
    }
    else if(cpassword.isEmpty() || !cpassword.equals(password))
    {
        showError(inputCpassword,"Passwords are not matching");
    }
    else
    {
        Toast.makeText(getApplicationContext(),"Registration 
Successful",Toast.LENGTH_SHORT).show();
    }
}
 private void showError(EditText input, String your_username_is_not_valid) {
 input.setError(your_username_is_not_valid);
    input.requestFocus();

}
}


 

尝试将以下行移出 OnClickListener,它们应该在 onCreate 方法中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    //...
    inputUsername = findViewById(R.id.inputUsername);
    inputEmail = findViewById(R.id.inputEmail);
    inputPassword = findViewById(R.id.inputPassword);
    inputCpassword = findViewById(R.id.inputCpassword);
    btnRegister = findViewById(R.id.btnRegister);
    btnRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
               validations();
        }
    });
    // ...
}

这样做是必要的,这样才能更清洁和工作。

private EditText inputUsername,inputEmail,inputPassword,inputCpassword;
Button btnRegister;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
            TextView btn=findViewById(R.id.alreadyHaveAccount);
            inputUsername=findViewById(R.id.inputUsername);
            inputEmail=findViewById(R.id.inputEmail);
            inputPassword=findViewById(R.id.inputPassword);
            inputCpassword=findViewById(R.id.inputCpassword);
            btnRegister=findViewById(R.id.btnRegister);
    TextView btn=findViewById(R.id.alreadyHaveAccount);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {                                
              startActivity(new Intent(RegisterActivity.this,LoginActivity.class));
                
        }
    });

    btnRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
               validations();
        }
    });

}