“日期选择器”对话框在实际设备中崩溃

时间:2017-09-09 16:00:00

标签: java android

我正在使用日期选择器对话框注册用户,它在模拟器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));
    }


}

1 个答案:

答案 0 :(得分:0)

您已从XML布局中引用onclick方法。

public void datePicker (View view)
    {
        DatePickerFragment fragment = new DatePickerFragment();
        fragment.show(getSupportFragmentManager(), "date");
    }

而不是这个。在您的活动中使用onClickListener

希望有所帮助:)