2012-05-26 9 views
1

나는 datepicker 설정을 가지고 있으며 응용 프로그램을 계속 충돌시킵니다. 나는이 Tutorial을 따라 갔고 왜 작동하지 않는지 모르겠다.날짜 선택 도구가 안드로이드에서 작동하지 않습니다.

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; 
      } 
} 

로그 캣 :

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) 

답변

1

나는 그것을 응용 프로그램이

주요 코드가 충돌 할 때 얻을 로그 캣뿐만 아니라 보여주기 위해 아래 클래스의 전체 코드를 게시 할 예정입니다

mYear, mMonth 또는 mDay을 사용하기 전에 절대 초기화하지 마십시오.

+1

코드 시작 부분에 있습니다. private int mYear, mMonth, mDay; private int cYear, cMonth, cDay; –

+1

@DarrenMurtagh : 당신 * 선언했다. * 값을 초기화하지 않았습니다. 그들은 각각 "0"이고, "0"은 유효한 달의 날이 아닙니다. – CommonsWare

+0

그래서 내가 어떻게 그들을 초기화합니까? –

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 내 날짜 선택의 ID이며, dateStart는 내부 액세스 할 수 있도록 전 세계적으로 선언 된 java.util.Date 객체입니다 내 활동의 모든 기능/처리기

희망이 있습니다.

관련 문제