我正在使用日期选择器对话框注册用户,它在模拟器25中工作正常但是当我按下真实设备中的字段时应用程序崩溃。请问有人可以在这方面帮助我吗? 此外,我在同一个网络上,但是当我注册或登录应用程序时,我从PHP脚本中得不到Json响应,这意味着它不会从数据库发送或接收数据。
public class Signup extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, View.OnClickListener{
// private UserSingupTask mAuthTask = null;
// private EditText sEmail,sPassword;
EditText Name, Email, Password, DateOfBirth;
RadioGroup Gender;
Button signupbutton;
private ProgressDialog progressDialog;
private TextView textViewLogin;
String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.signup);
Name = (EditText)findViewById(R.id.signupname);
Email = (EditText)findViewById(R.id.signupemail);
Password = (EditText) findViewById(R.id.signuppassword);
DateOfBirth = (EditText)findViewById(R.id.signupdateofbirth);
Gender = (RadioGroup) findViewById(R.id.radio_grp);
signupbutton = (Button) findViewById(R.id.signupButton);
textViewLogin = (TextView) findViewById(R.id.link_login);
progressDialog = new ProgressDialog(this);
signupbutton.setOnClickListener(this);
textViewLogin.setOnClickListener(this);
Gender = (RadioGroup) findViewById(R.id.radio_grp);
}
public void datePicker (View view)
{
DatePickerFragment fragment = new DatePickerFragment();
fragment.show(getSupportFragmentManager(), "date");
}
@RequiresApi(api = Build.VERSION_CODES.N)
private void setDate(final Calendar calendar)
{
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
EditText editText = ((EditText) findViewById(R.id.signupdateofbirth));
editText.setText(dateFormat.format(calendar.getTime()));
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Calendar calendar = new GregorianCalendar(year,month,dayOfMonth);
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH,month);
calendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);
// editText.setText(dateFormat.format(calendar.getTime()));
setDate(calendar);
}
public static class DatePickerFragment extends DialogFragment
{
@RequiresApi(api = Build.VERSION_CODES.N)
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar. DAY_OF_MONTH);
return new DatePickerDialog(getActivity(),(DatePickerDialog.OnDateSetListener)getActivity(),year,month,day);
}
}
private void registerUser() {
final String username = Name.getText().toString().trim();
final String email = Email.getText().toString().trim();
final String password = Password.getText().toString().trim();
final String dateofbirth = DateOfBirth.getText().toString().trim();
String genderString = "";
//Get the selected gender value from the radio buttons
RadioButton male = (RadioButton) findViewById(R.id.male);
boolean isMaleChecked = male.isChecked();
RadioButton female = (RadioButton) findViewById(R.id.female);
boolean isFemaleChecked = female.isChecked();
if(isMaleChecked){
genderString = "male";
}else if(isFemaleChecked){
genderString = "female";
}
final String _gender = genderString;
if (!email.matches(emailPattern) && password.length()<5) {
Toast.makeText(getApplicationContext(),"Invalid Email or Password is Short",Toast.LENGTH_SHORT).show();
} else {
progressDialog.setMessage("Registering user...");
progressDialog.show();
StringRequest stringRequest = new StringRequest(Request.Method.POST,
Constants.URL_REGISTER,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressDialog.dismiss();
try {
JSONObject jsonObject = new JSONObject(response);
if(jsonObject.getBoolean("error")){
Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
}else if (!jsonObject.getBoolean("error")){
Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
finish();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialog.hide();
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("name", username);
params.put("email", email);
params.put("password", password);
params.put("dateOfBirth", dateofbirth);
params.put("gender", _gender);
return params;
}
};
RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
// finish();
}
}
@Override
public void onClick(View view) {
if (view == signupbutton)
{
registerUser();
}
if(view == textViewLogin)
startActivity(new Intent(this, Login.class));
}
}
答案 0 :(得分:0)
您已从XML布局中引用onclick
方法。
public void datePicker (View view)
{
DatePickerFragment fragment = new DatePickerFragment();
fragment.show(getSupportFragmentManager(), "date");
}
而不是这个。在您的活动中使用onClickListener
。
希望有所帮助:)