问题描述
public class RegisterActivity extends AppCompatActivity {
private static final String TAG = "Register Activity";
private EditText registerFullName,registerEmailAddress,registerPhoneNumber,registerPassword,registerRePassword;
private CheckBox signUpCheckBox;
private static final Pattern PASSWORD_PATTERN =
Pattern.compile("^" +
"(?=.*[0-9])" + //at least 1 digit
// "(?=.*[a-z])" + //at least 1 lower case letter
// "(?=.*[A-Z])" + //at least 1 upper case letter
"(?=.*[a-zA-Z])" + //any letter
"(?=.*[@#$%^&+=])" + //at least 1 special character
"(?=\\S+$)" + //no white spaces
".{8,}" + //at least 8 characters
"$");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_register);
// final String email;
registerFullName = (EditText) findViewById(R.id.registerFullName);
registerEmailAddress = (EditText) findViewById(R.id.registerEmailAddress);
registerPhoneNumber = findViewById(R.id.registerPhoneNumber);
registerPassword = (EditText) findViewById(R.id.registerPassword);
registerRePassword = findViewById(R.id.registerRePassword);
signUpCheckBox = findViewById(R.id.signUpCheckBox);
TextView back2Login = (TextView) findViewById(R.id.registerBack2Login);
ImageView registerBackBtn = (ImageView) findViewById(R.id.registerBackBtn);
RelativeLayout relativeLayout = findViewById(R.id.signUplayout);
relativeLayout.scheduleLayoutAnimation();
registerPassword.setTransformationMethod(new PasswordTransformationMethod());
registerRePassword.setTransformationMethod(new PasswordTransformationMethod());
// registerPassword.setTransformationMethod(new HideReturnsTransformationMethod());
// registerRePassword.setTransformationMethod(new HideReturnsTransformationMethod());
registerBackBtn.setOnClickListener(v -> {
Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
startActivity(intent);
finish();
});
back2Login.setOnClickListener(v -> {
Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
startActivity(intent);
finish();
});
}
private void Usersignup() {
String email = registerEmailAddress.getText().toString().trim();
String name = registerFullName.getText().toString().trim();
String password = registerPassword.getText().toString().trim();
if (registerFullName.getText().toString().trim().isEmpty()) {
registerFullName.setError("Username is required");
registerFullName.requestFocus();
return;
}else {
registerFullName.setError(null);
}
if (registerPhoneNumber.getText().toString().trim().isEmpty()) {
registerPhoneNumber.setError("Field Can't be Empty");
registerFullName.requestFocus();
return;
}else{
registerPhoneNumber.setError(null);
}
if (email.isEmpty()) {
registerEmailAddress.setError("Email is required");
registerEmailAddress.requestFocus();
return;
}else {
registerEmailAddress.setError(null);
}
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
registerEmailAddress.setError("Invalid emailaddress");
registerEmailAddress.requestFocus();
return;
}
if (name.isEmpty()) {
registerFullName.setError("Name is required");
registerFullName.requestFocus();
return;
}else {
registerFullName.setError(null);
}
if (password.isEmpty()) {
registerPassword.setError("Enter the password");
registerPassword.requestFocus();
return;
}else if(!PASSWORD_PATTERN.matcher(password).matches()){
registerPassword.setError("Password should contain atleast 1 alphabet,1 special character,1 numeric value,and a total of 8 characters");
return;
} else {
registerPassword.setError(null);
}
if (registerRePassword.getText().toString().trim().isEmpty()) {
registerRePassword.setError("Field Can't be Empty");
registerRePassword.requestFocus();
return;
}
if (!registerRePassword.getText().toString().trim().equals(registerPassword.getText().toString().trim())) {
registerRePassword.setError("Password Don't match. Please Match Again");
registerRePassword.requestFocus();
return;
}else {
registerRePassword.setError(null);
}
FoodVybeAPI foodVybeAPI = ApiClient.getRetrofit().create(FoodVybeAPI.class);
foodVybeAPI.register(name,email,password).enqueue(new Callback<Userinfo>() {
@Override
public void onResponse(Call<Userinfo> call,Response<Userinfo> response) {
if (response.code()==404) {
Toast.makeText(RegisterActivity.this,"An error occurred try again later",Toast.LENGTH_LONG).show();
Log.e(TAG,"onResponse: Not Successfull" + response.errorBody() + response.code());
return;
// } else if (response.code()==400){
// Toast.makeText(RegisterActivity.this,"Already Registered",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(RegisterActivity.this,"Woo! You are registered now Just Verify Email and login here",Toast.LENGTH_LONG).show();
Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
startActivity(intent);
finish();}
}
@Override
public void onFailure(Call<Userinfo> call,Throwable t) {
Toast.makeText(RegisterActivity.this,t.getLocalizedMessage(),Toast.LENGTH_SHORT);
Log.e(TAG,"onFailure: Failure" + t.getMessage());
}
});
}
public void registerSignUp(View view) {
if (!signUpCheckBox.isChecked()) {
Toast.makeText(this,"Please Accept Terms and Conditions",Toast.LENGTH_SHORT).show();
} else {
Usersignup();
}
}
}
Userinfo class:
public class Userinfo {
@SerializedName("userName")
@Expose
String userName;
@SerializedName("email")
@Expose
String email;
@SerializedName("password")
@Expose
String password;
public Userinfo(String name,String email,String password) {
name = userName;
this.email = email;
this.password = password;
}
public String getName() {
return userName;
}
public void setName(String name) {
this.userName = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Interface:
@FormUrlEncoded
@POST("user/login")
Call<User> login(@Field("email") String email,@Field("password") String password);
@FormUrlEncoded
@POST("user/register")
Call<Userinfo> register(
@Field("userName") String userName,@Field("email") String email,@Field("password") String password);
解决方法
如果你想显示该用户已经存在。
- 只需要求您的后端开发人员添加状态和消息作为响应即可。
- 如果用户注册成功,则状态为成功,消息为“注册成功”
- 如果用户已存在,则状态将失败并且消息将是“用户已存在”。
只需像这样使用您的 UserInfo
类:
包com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class UserInfo {
@SerializedName("userName")
@Expose
private String userName;
@SerializedName("email")
@Expose
private String email;
@SerializedName("password")
@Expose
private String password;
@SerializedName("error")
@Expose
private String error;
@SerializedName("message")
@Expose
private String message;
@SerializedName("status")
@Expose
private String status;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
现在,如果您收到 400 状态代码,请向他显示来自 error
类的 status
和 UserInfo
消息 cz 现在您的 UserInfo
类包含状态、错误、消息信息,否则如果你得到 201 或 200 状态码,继续成功
if (response.code()==404) {
Toast.makeText(RegisterActivity.this,response.status.toString(),Toast.LENGTH_LONG).show();
Log.e(TAG,"onResponse: Not Successfull" + response.errorBody() + response.code());
return;
} else if (response.code()==400){
UserInfo userInfo = response.body();
Toast.makeText(RegisterActivity.this,userInfo.status.toString(),Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(RegisterActivity.this,"Woo! You are registered now Just Verify Email and login here",Toast.LENGTH_LONG).show();
Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
startActivity(intent);
finish();}