20

Ho problemi con la creazione di un DatePicker nel dispositivo Samsung Note 2 con lecca-lecca 5.0. L'eccezione è:Arresto DatePicker in samsung con 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) 

ho usato l'esempio fornito nella pagina ufficiale di Android Studio:

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 

    } 
} 

mi chiamano così:

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

In altri dispositivi funziona bene .

Ho anche provato a creare il mio layout con un DatePicker al suo interno, davvero semplice ma anche in crash. Questo è un bug di Android?

+1

Si tratta di un bug nella versione di Samsung di Lollipop che non è presente in AOSP. Dovrai contattare l'assistenza Samsung. – alanv

+1

Anche se il proggog cfg lo ha risolto ma sta ancora andando in crash. Il problema era nello stile Theme.AppCompat solo per Samsung Note3. La mia risoluzione era di cambiare lo stile di DatePicker 'DatePickerDialog dpd = new DatePickerDialog (getActivity(), R.style.MyDatePicker, this, year, month, day)' –

+0

Ciao @vilson potresti spiegare R.style.MyDatePicker un po ' Di Più? Cosa hai messo lì dentro? Grazie! –

risposta

1

Dimentica il selettore di date incorporato. C'è solo un modo per sbarazzarsi dello schianto: utilizzare una libreria che fornisce un'implementazione indipendente.

Per un frammento selettore di data: https://github.com/flavienlaurent/datetimepicker

Per un contatore Data: https://github.com/SingleCycleKing/CustomTimePicker (questo è più un punto di partenza di una pronta per l'uso-soluzione)

+0

Come si può essere sicuri che la libreria di terze parti non si arresti in modo anomalo? –

+0

Ho testato entrambe le librerie su un dispositivo in cui il selettore di data build-in si è bloccato. Inoltre ho rilasciato le mie app utilizzando le librerie e improvvisamente i rapporti sugli arresti anomali si sono interrotti. Questa non è una prova esatta, ma non ho ricevuto alcun arresto causato dalle librerie stesse. Beh, non c'è mai una garanzia che le librerie open source siano prive di bug ;-) – stefan222

0

Come alanv notato, questo è un bug dell'implementazione Android 5 di Samsung.

Ho impostato un tema diverso che mostra il selettore di data con i filatori (meno recenti) anziché la vista del calendario. Nel codice, controllo se l'app è in esecuzione su un dispositivo Samsung con lecca-lecca e una lingua diversa dall'inglese, e se è così, applico il tema con gli spinners. Funziona bene e non ci sono altre librerie o altri hack necessari.

Se necessario, è possibile aggiungere il tema e come applicarlo a questa risposta.