Выбор даты не работает в Android

1

У меня есть настройка datepicker, и она продолжает сбой приложения. Я следовал этому учебнику, и я не знаю, почему он не работает.

я опубликую полный код класса ниже, чтобы показать, а также logcat, который я получаю, когда он сбой приложения

основной код:

public class WorkoutChoice extends Activity
{
 private TextView mDateDisplay;
 private Button mPickDate;
 private int mYear,mMonth,mDay;
 private int cYear,cMonth,cDay;
 static final int DATE_DIALOG_ID = 0;
 Button   mButton;
 EditText cweight;
 EditText nweight;
 TextView t;
 String s,s2,cDate;
 int current,target;
 DataBaseHelper db = new DataBaseHelper(this);
@Override
public 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.choice);

    mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
    mPickDate = (Button) findViewById(R.id.pickDate);
    mPickDate.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID);
        }
    });
    final Calendar c = Calendar.getInstance();
    cYear = c.get(Calendar.YEAR);
    cMonth = c.get(Calendar.MONTH);
    cDay = c.get(Calendar.DAY_OF_MONTH);
    cDate = (""+cYear+""+cMonth+""+cDay);
    Date past = new Date(112, cMonth, cDay); // current Date
    Date today = new Date(112, 11, 18); // date Choosen by the user
    final int days = Days.daysBetween(new DateTime(past), new DateTime(today)).getDays()+1;
     mDateDisplay.setText(cDate);
     //display the current date (this method is below)
     updateDisplay();

    mButton = (Button)findViewById(R.id.get);
    cweight   = (EditText)findViewById(R.id.cweight);
    nweight   = (EditText)findViewById(R.id.nweight);
    t = (TextView)findViewById(R.id.out);

    mButton.setOnClickListener(
        new View.OnClickListener()
        {
            public void onClick(View view)
            {
                db.open();
               s = WorkoutChoice.this.cweight.getText().toString();
               current =  Integer.parseInt(s);
               s2 = WorkoutChoice.this.nweight.getText().toString();
               target =  Integer.parseInt(s2);
               db.deleteFirst();
               db.insertTitle("001", current, target);
               db.close();
            }

        });

}
public void convert(View view) 
{
    Intent i = new Intent();
    i.setClassName("com.b00348312.workout","com.b00348312.workout.convert");
    startActivity(i); 
}
 private void updateDisplay() {
        mDateDisplay.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mMonth + 1).append("-")
                    .append(mDay).append("-")
                    .append(mYear).append(" "));
    } 
 private DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view, int year, 
                                      int monthOfYear, int dayOfMonth) {
                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();
                }
            };
           @Override
           protected Dialog onCreateDialog(int id) {
                switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this,
                                mDateSetListener,
                                mYear, mMonth, mDay);
                }
                return null;
            }
}

Logcat:

05-26 21:37:25.928: E/AndroidRuntime(334): FATAL EXCEPTION: main
05-26 21:37:25.928: E/AndroidRuntime(334): java.lang.IllegalArgumentException: current should be >= start and <= end
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.widget.NumberPicker.setCurrent(NumberPicker.java:288)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.widget.DatePicker.updateDaySpinner(DatePicker.java:364)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.widget.DatePicker.updateSpinners(DatePicker.java:350)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.widget.DatePicker.init(DatePicker.java:346)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.DatePickerDialog.<init>(DatePickerDialog.java:124)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.DatePickerDialog.<init>(DatePickerDialog.java:83)
05-26 21:37:25.928: E/AndroidRuntime(334):  at com.b00348312.workout.WorkoutChoice.onCreateDialog(WorkoutChoice.java:123)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.Activity.onCreateDialog(Activity.java:2472)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.Activity.createDialog(Activity.java:881)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.Activity.showDialog(Activity.java:2547)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.Activity.showDialog(Activity.java:2514)
05-26 21:37:25.928: E/AndroidRuntime(334):  at com.b00348312.workout.WorkoutChoice$2.onClick(WorkoutChoice.java:56)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.view.View.performClick(View.java:2408)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.view.View$PerformClick.run(View.java:8816)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.os.Handler.handleCallback(Handler.java:587)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.os.Looper.loop(Looper.java:123)
05-26 21:37:25.928: E/AndroidRuntime(334):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-26 21:37:25.928: E/AndroidRuntime(334):  at java.lang.reflect.Method.invokeNative(Native Method)
05-26 21:37:25.928: E/AndroidRuntime(334):  at java.lang.reflect.Method.invoke(Method.java:521)
05-26 21:37:25.928: E/AndroidRuntime(334):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)  
05-26 21:37:25.928: E/AndroidRuntime(334):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-26 21:37:25.928: E/AndroidRuntime(334):  at dalvik.system.NativeStart.main(Native Method)
Теги:
datepicker
logcat

2 ответа

1

Вы никогда не инициализируете mYear, mMonth или mDay перед их использованием.

  • 1
    Я делаю в начале кода. private int mYear, mMonth, mDay; private int cYear, cMonth, cDay;
  • 1
    @DarrenMurtagh: Вы объявили их. Вы не инициализировали их действительными значениями. Каждый из них будет равен 0 , а 0 , не является действительным днем месяца.
Показать ещё 7 комментариев
0

Это довольно просто, используйте следующее,

dtpStart.init(now.getYear(), now.getMonth(), now.getDay(),new OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year,int monthOfYear, int dayOfMonth) { dateStart = (Date) new Date(year, monthOfYear,dayOfMonth); } }
Где dtpStart - это идентификатор моего Date Picker, а DateStart - это объект java.util.Date, который объявляется глобально, чтобы к нему можно было обращаться внутри любых функций/обработчиков на протяжении всего моего действия

Надеюсь, поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню