2015-03-08 3 views
0

Я работаю над своим Android-приложением, но, к сожалению, я столкнулся с проблемой, которая нигде не охвачена. Неправильные даты обрабатываются, как указано в названии, мой пример кода здесь:Android DateFormat.parse (String) анализирует неправильные даты

EditText date_field = (EditText) findViewById(R.id.date); 
String date = date_field.getText().toString(); 
DateFormat date_format = SimpleDateFormat.getDateInstance(DateFormat.SHORT); 
try 
{ 
    date_format.parse(date); 
} 
catch (ParseException e) 
{ 
    Toast.makeText(this, "Please specify the date", Toast.LENGTH_SHORT).show(); 
    return; 
} 

Вопрос заключается в том, что он не ловит исключения для входа, как «0.0.0» или «03.06.05» и скоро. Я попытался использовать ручной формат DateFormat следующим образом:

DateFormat date_format = new SimpleDateFormat("dd.MM.yyyy"); 

, но это также не помогло. Кто-нибудь знает, почему он анализирует неправильные даты?

ответ

1

Conside использованием DatePickerDialog. Некоторые полезные методы, чтобы избежать неправильного ввода даты:.. getDatePicker() setMinDate (Миллис) и getDatePicker() setMaxDate (Миллис)

Пример:

интерфейс

birthday = (EditText) rootView.findViewById(R.id.birthday); 
    birthday.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int code = event.getAction() & MotionEvent.ACTION_MASK; 
      switch (code) { 
       case MotionEvent.ACTION_DOWN: 
        DatePickerDialogFragment datePickerDialogFragment = new DatePickerDialogFragment(); 
        datePickerDialogFragment.setListener(new DatePickerDialog.OnDateSetListener() { 
         @Override 
         public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
          Calendar calendar = Calendar.getInstance(); 
          calendar.set(year, monthOfYear, dayOfMonth); 
          birthday.setText(android.text.format.DateFormat.format("yyyy-MM-dd", calendar)); 
         } 
        }); 
        datePickerDialogFragment.show(getFragmentManager(), DatePickerDialogFragment.TAG); 
      } 
      return true; 
     } 
    }); 

DatePickerDialog Фрагмент

public class DatePickerDialogFragment extends DialogFragment { 
    public static final String TAG = LogUtils.makeLogTag(DatePickerDialogFragment.class); 

    private DatePickerDialog.OnDateSetListener listener; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), 
       listener, 
       Calendar.getInstance().get(Calendar.YEAR), 
       Calendar.getInstance().get(Calendar.MONTH), 
       Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); 
     Calendar today = Calendar.getInstance(); 
     today.add(Calendar.YEAR, -4); 
     today.add(Calendar.DAY_OF_YEAR, -1); 
     datePickerDialog.getDatePicker().setMaxDate(today.getTimeInMillis()); 
     return datePickerDialog; 
    } 

    public void setListener(DatePickerDialog.OnDateSetListener listener) { 
     this.listener = listener; 
    } 
} 

В этом примере DatePickerDialog завернут в DialogFragment, чтобы он мог выжить при изменениях конфигурации (например, при поворотах экрана и т. Д.). Также минимальная дата установлена ​​не менее 4 лет назад - вы можете ее изменить.

Смежные вопросы