20

我在創建日期選擇器在三星note 2設備與棒棒糖5.0的麻煩。 唯一的例外是:DatePicker與android 5.0的三星崩潰

java.util.IllegalFormatConversionException: %d can not format java.lang.String arguments 
    at java.util.Formatter.badArgumentType(Formatter.java:1489) 
    at java.util.Formatter.transformFromInteger(Formatter.java:1689) 
    at java.util.Formatter.transform(Formatter.java:1461) 
    at java.util.Formatter.doFormat(Formatter.java:1081) 
    at java.util.Formatter.format(Formatter.java:1042) 
    at java.util.Formatter.format(Formatter.java:1011) 
    at java.lang.String.format(String.java:1803) 
    at android.content.res.Resources.getString(Resources.java:1457) 
    at android.content.Context.getString(Context.java:397) 
    at android.widget.SimpleMonthView$MonthViewTouchHelper.getItemDescription(SimpleMonthView.java:684) 
    at android.widget.SimpleMonthView$MonthViewTouchHelper.onPopulateNodeForVirtualView(SimpleMonthView.java:628) 
    at com.android.internal.widget.ExploreByTouchHelper.createNodeForChild(ExploreByTouchHelper.java:377) 
    at com.android.internal.widget.ExploreByTouchHelper.createNode(ExploreByTouchHelper.java:316) 
    at com.android.internal.widget.ExploreByTouchHelper.access$100(ExploreByTouchHelper.java:50) 
    at com.android.internal.widget.ExploreByTouchHelper$ExploreByTouchNodeProvider.createAccessibilityNodeInfo(ExploreByTouchHelper.java:711) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfVirtualNode(AccessibilityInteractionController.java:1179) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1091) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1087) 
    at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos(AccessibilityInteractionController.java:888) 
    at android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread(AccessibilityInteractionController.java:155) 
    at android.view.AccessibilityInteractionController.access$400(AccessibilityInteractionController.java:53) 
    at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:1236) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:5944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 

我已經使用在Android官方工作室頁面提供的示例:

public static class DatePickerFragment extends DialogFragment 
      implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 
     // Create a new instance of DatePickerDialog and return it 

     DatePickerDialog dpd = new DatePickerDialog(getActivity(), this,year, month, day); 
     return dpd; 


    } 
    @Override 
    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // get the date here 

    } 
} 

我這樣稱呼它:

DialogFragment newFragment = new DatePickerFragment(); 
newFragment.show(getFragmentManager(), "datePicker"); 

在其他設備工作正常。

我也嘗試創建我自己的佈局,其中DatePicker在裏面,非常簡單,但也崩潰。這是一些Android錯誤?

+1

這是三星的版本棒棒糖的錯誤,不存在在AOSP。您需要聯繫三星支持。 – alanv 2015-02-05 18:26:18

+1

雖然proguard cfg解決了它,但它仍然崩潰。問題出在三星Note3的風格Theme.AppCompat中。我的決議是改變DatePicker DatePickerDialog的樣式dpd = new DatePickerDialog(getActivity(),R.style.MyDatePicker,this,year,month,day);' – 2015-02-11 14:55:00

+0

Hi @vilson你能解釋一下R.style.MyDatePicker更多?你在那裏放了什麼?謝謝! – 2015-02-15 21:08:26

回答

1

忘掉內置日期選擇器。只有一種方法可以擺脫崩潰:使用提供獨立實現的庫。

對於日期選擇器片段:https://github.com/flavienlaurent/datetimepicker

對於日期選擇器窗口小部件:https://github.com/SingleCycleKing/CustomTimePicker(這是多於一個準備使用的溶液的起點)

+0

如何確保第三方庫不會崩潰? – 2015-07-21 01:45:48

+0

我已經在內置日期選擇器崩潰的設備上測試了這兩個庫。另外,我使用庫發佈了我的應用程序,並突然停止了崩潰報告。這不是一個確切的證據,但我沒有收到圖書館本身造成的任何崩潰。那麼,從來沒有保證開放源碼庫將免費的錯誤;-) – stefan222 2015-07-21 06:37:35

0

作爲alanv注意到的,這是一個三星Android 5實施的缺陷。

我設置了一個不同的主題,它顯示日期選擇器與(舊)spinners而不是日曆視圖。在代碼中,我檢查應用程序是否在帶有棒棒糖和非英語的語言的三星設備上運行,如果是這樣,我將這個主題應用到spinners中。這個效果很好,沒有其他圖書館或其他必要的黑客。

如果需要,我可以添加主題以及如何將其應用於此答案。

相關問題