2017-12-24 10 views
0

こんにちは私は、ユーザーがEditTextをタップするとポップアップするdatepickerダイアログを持っています。それは別のデバイスで動作しますが、Android 6.0を実行しましたが、同じアプリをkitkatを実行するテーブルで試してみましたが、クラッシュしました。kitkatでminDateまたはmaxDateを設定するとAndroid DatePickerがクラッシュする

setMinDateコードまたはsetMaxDateコードであることを確認できます。これを実行した後にページがクラッシュしなかったためです。

これはログである:

E/AndroidRuntime:致命的な例外:メイン

プロセス:com.xxxxxx.pointofsale、PID:13402 java.lang.NullPointerExceptionがandroid.widgetました。 CalendarView.onScroll(CalendarView.java:1216)android.widget.CalendarView.accessの $ 900(CalendarView.java:76) at android.widget.CalendarView $ 2.onScroll(CalendarView.java:1077) android.widget.AbsListView.onLayoutでandroid.widget.ListView.layoutChildren(ListView.java:1745) でandroid.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:1463) (AbsListView.java:2149) ででandroid.view.View.layout(View.java:15125) とandroid.view.ViewGroup.layout(ViewGroup.java:4862) (android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) )でアンドロイド。ウィジェット.LinearLayout.layoutVertical(LinearLayout.java:1742) とandroid.widget.LinearLayout.onLayout(LinearLayout.java:1651) android.view.View.layout(View.java: (FrameLayout.java:450)の にあります。 android.widget.LinearLayout.setChildFrameでandroid.view.ViewGroup.layout(ViewGroup.java:4862) でandroid.view.View.layout(View.java:15125) (LinearLayout.java:1888) でで android.widget.LinearLayout.layoutHorizo​​ntal(LinearLayout.java:1877) at android.widget.LinearLayout.onLayout(LinearLayout.java:1653) at andr oid.view.View.layout(View.java:15125) android.view.ViewGroup.layout(ViewGroup.java:4862) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) at android。ウィジェット.FrameLayout.onLayout(FrameLayout.java:450) android.view.View.layout(View.java:15125) with android.view.ViewGroup.layout(ViewGroup.java:4862) android.widget。 FrameLayout.layoutChildren(FrameLayout.java:515) とandroid.widget.FrameLayout.onLayout(FrameLayout.java:450) at android.view.View.layout(View.java:15125) android.view.ViewGroup。レイアウト(ViewGro (View.java:4862) とandroid.widget.FrameLayout.layoutChildren(FrameLayout.java:515) at android.widget.FrameLayout.onLayout(FrameLayout.java:450) at android.view.View.layout(View。Javaの:15125) android.view.ViewGroup.layout(ViewGroup.java:4862) でandroid.widget.LinearLayout.layoutVerticalでandroid.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) (LinearLayout.javaで: 1742) android.widget.LinearLayout.onLayout(LinearLayout.java:1651) android.view.View.layout(View.java:15125) android.view.ViewGroup.layout(ViewGroup.java:4862) android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) とandroid.widget.FrameLayout.onLayout(FrameLayout.java:450) android.view.View.layout(View.jav A:15125)android.widget.LinearLayout.layoutVertical(LinearLayout.javaでandroid.view.ViewGroup.layout(ViewGroup.java:4862)android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) で で: 1742) android.widget.LinearLayout.onLayout(LinearLayout.java:1651) android.view.View.layout(View.java:15125) android.view.ViewGroup.layout(ViewGroup.java:4862) android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) とandroid.widget.FrameLayout.onLayout(FrameLayout.java:450) android.view.View.layout(View.java:1) (ViewRootImpl.java:2029)の の は、 android.view.Choreographer $ CallbackRecord.runで android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6231) でandroid.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1192) (振付で 。 java:788) android.view.Choreographer.doCallbacks(Choreographer.java:591) android.view.Choreographer.doFrame(Chore android.os.Handler.handleCallbackでographer.java:560) でandroid.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:774) (Handler.java:808) android.os.Handler.dispatchMessageで(Handler.java:103) とandroid.os.Looper.loop(Looper.java:193) とandroid.app.ActivityThread.main(ActivityThread.java:5292) at java.lang.reflect.Method.invokeNative (Nativ

は、これは私のコードです:

final DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
           int dayOfMonth) { 

      mCalendar.set(Calendar.YEAR, year); 
      mCalendar.set(Calendar.MONTH, monthOfYear); 
      mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 

      String myFormat = "yyyy-MM-dd"; //In which you need put here 
      SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); 

      mSelectedDate = sdf.format(mCalendar.getTime()); 
      etDate.setText(Utils.formatDate(mSelectedDate, "yyyy-MM-dd", "EEEE, d MMMM yyyy")); 
      getTravelSchedules(); 
     } 

    }; 

    private final View.OnClickListener mDateViewOnClickListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (etDate.getText().toString().equals("")) { 
       Toast.makeText(getApplicationContext(), "Please select a destination first!", Toast.LENGTH_LONG).show(); 
       return; 
      } 

      Date today = new Date(); 
      Calendar c = Calendar.getInstance(); 
      c.setTime(today); 
      c.add(Calendar.DATE, +7); 
      final long maxDate = c.getTime().getTime(); 

      c.setTime(today); 
      final long minDate = c.getTime().getTime(); 

      DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, R.style.DialogTheme, mDateSetListener, mCalendar 
        .get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), 
        mCalendar.get(Calendar.DAY_OF_MONTH)); 
      datePickerDialog.getDatePicker().setMinDate(minDate); 
      datePickerDialog.getDatePicker().setMaxDate(maxDate); 
      datePickerDialog.show(); 
     } 
    }; 

答えて

0

あなたはとても基本的に代わりdatepickerdialog自体に最小と最大の日付を設定するので、私はカレンダーに追加する代わりに、おかげでそれをしようとしますよしも

void showDatePickerDialog(final EditText et) { 

    DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      // TODO Auto-generated method stub 
      Calendar myCalendar = Calendar.getInstance(); 
      myCalendar.set(Calendar.YEAR, year); 
      myCalendar.set(Calendar.MONTH, monthOfYear); 
      myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
      et.setText(new SimpleDateFormat("dd MMM, yyyy", Locale.getDefault()).format(myCalendar.getTime()));  
     } 
    }; 

    // Calendar Minimum Range 
    Calendar calendarMinDate = Calendar.getInstance(); 
    calendarMinDate.add(Calendar.DATE, 0); 

    // Calendar Maximum Range 
    Calendar calendarMaxDate = Calendar.getInstance(); 
    calendarMaxDate.add(Calendar.DATE, +7); 

    DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), 
      R.style.MyDatePickerDialogTheme, date, calYear, calMonth, calDay); 
    datePickerDialog.getDatePicker().setMinDate(calendarMinDate.getTimeInMillis()); 
    datePickerDialog.getDatePicker().setMaxDate(calendarMaxDate.getTimeInMillis()); 
    datePickerDialog.show(); 
} 
+0

のように、この機能を使用することができます。 – user3718908

+0

私はこれを試しても、問題は依然として持続し、アプリがクラッシュします。 – user3718908

+0

は基本的にクラッシュが何を示しているのですか?正確に –

関連する問題