Java 在实际设备中,日期选择器对话框崩溃
我使用日期选择器对话框来注册用户,它在emulator 25中运行良好,但当我在实际设备中按下该字段时,应用程序崩溃。在这方面有人能帮我吗? 此外,我在同一个网络上,但是当我注册或登录到应用程序时,我没有收到来自PHP脚本的Json响应,这意味着它不会从数据库发送或接收数据Java 在实际设备中,日期选择器对话框崩溃,java,android,Java,Android,我使用日期选择器对话框来注册用户,它在emulator 25中运行良好,但当我在实际设备中按下该字段时,应用程序崩溃。在这方面有人能帮我吗? 此外,我在同一个网络上,但是当我注册或登录到应用程序时,我没有收到来自PHP脚本的Json响应,这意味着它不会从数据库发送或接收数据 public class Signup extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, View.OnClickListene
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));
}
}
公共类注册扩展了AppCompatActivity实现了DatePickerDialog.OnDateSetListener、View.OnClickListener{
//private UserSingupTask mauthttask=null;
//私人编辑文本语义,sPassword;
编辑文本名称、电子邮件、密码、出生日期;
放射组性别;
按钮标志按钮;
私有进程对话;
私有文本视图文本视图登录;
字符串emailPattern=“[a-zA-Z0-9.\u-]+@[a-z]+\.+[a-z]+”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.signup);
Name=(EditText)findViewById(R.id.signupname);
Email=(EditText)findviewbyd(R.id.signupemail);
密码=(EditText)findViewById(R.id.signuppassword);
DateOfBirth=(EditText)findViewById(R.id.signupdateofbirth);
性别=(放射组)findViewById(R.id.radio\U grp);
signupbutton=(按钮)findViewById(R.id.signupbutton);
textViewLogin=(TextView)findViewById(R.id.link\u login);
progressDialog=新建progressDialog(此);
signupbutton.setOnClickListener(此);
textViewLogin.setOnClickListener(这个);
性别=(放射组)findViewById(R.id.radio\U grp);
}
公共作废日期选择器(视图)
{
DatePickerFragment=新的DatePickerFragment();
show(getSupportFragmentManager(),“date”);
}
@RequiresApi(api=Build.VERSION\u code.N)
私有无效设置日期(最终日历)
{
final DateFormat DateFormat=DateFormat.getDateInstance(DateFormat.MEDIUM);
EditText EditText=((EditText)findViewById(R.id.signupdateofbirth));
editText.setText(dateFormat.format(calendar.getTime());
}
@RequiresApi(api=Build.VERSION\u code.N)
@凌驾
public void onDateSet(日期选择器视图,整数年,整数月,整数天月){
日历=新的公历日历(年、月、月日);
calendar.set(calendar.YEAR,YEAR);
日历.设置(日历.月,月);
calendar.set(calendar.DAY\u OF月,dayOfMonth);
//editText.setText(dateFormat.format(calendar.getTime());
设定日期(日历);
}
公共静态类DatePickerFragment扩展了DialogFragment
{
@RequiresApi(api=Build.VERSION\u code.N)
@非空
@凌驾
创建对话框上的公共对话框(Bundle savedInstanceState){
最终日历=Calendar.getInstance();
int year=calendar.get(calendar.year);
int month=calendar.get(calendar.month);
int day=calendar.get(calendar.day/u月);
返回新的DatePickerDialog(getActivity(),(DatePickerDialog.OnDateSetListener)getActivity(),年、月、日);
}
}
私有无效注册器(){
最终字符串username=Name.getText().toString().trim();
最终字符串email=email.getText().toString().trim();
最终字符串密码=password.getText().toString().trim();
最终字符串dateofbirth=dateofbirth.getText().toString().trim();
字符串genderString=“”;
//从单选按钮中获取选定的性别值
RadioButton male=(RadioButton)findViewById(R.id.male);
布尔值isMaleChecked=male.isChecked();
RadioButton阴性=(RadioButton)findViewById(R.id.female);
布尔值isFemaleChecked=female.isChecked();
如果(已选中){
genderString=“男性”;
}else if(是否已选中){
genderString=“女性”;
}
最后一个字符串_gender=genderString;
如果(!email.matches(emailPattern)&&password.length()您已经从XML布局中引用了onclick
方法
public void datePicker (View view)
{
DatePickerFragment fragment = new DatePickerFragment();
fragment.show(getSupportFragmentManager(), "date");
}
在活动中使用onClickListener
希望有帮助:)我不太确定您指的是什么,我知道在onCreate方法中将其调用为setOnClickListner。但我必须对哪段代码执行此操作?发布您的xml文件和崩溃报告问题是,当我在真实设备上运行它时,我在logcat中看不到任何内容,我不知道该怎么做。如果不设置filt,您将获得一些崩溃报告在你的日志中请分享日志