Unter dem Titel “Android 4.2 vergisst Dezember” berichtet heise über das folgende Problem. Neckischerweise ist die Handhabung zwischen Kalender und Adressbuch nicht gleich gelöst worden.
mMonthPicker.setMinValue(1); mMonthPicker.setMaxValue(12); mMonthPicker.setDisplayedValues(months);
Eine Umgehungslösung ist die folgende:
First temporarily change the language to Chinese or Japanese
Now go to contacts and enter the date to December
Later change the language back to your preferred language
Und warum geht das? Weil das Datum jetzt keine Monatsnamen mehr enthält. Und hier sehen wir die Änderung, welche zum Problem geführt hat:
// Make sure the min, max, respect the size of the displayed // values. This will take care of the current value as well. if (getMinValue() >= displayedValues.length) { setMinValue(0); } if (getMaxValue() >= displayedValues.length) { setMaxValue(displayedValues.length - 1); }
Die Lösung wäre wohl:
setMaxValue(displayedValues.length);
Und schon haben wir das Problem gesehen. Wobei wir hier einfach den Array Zeiger übergeben. Der Array für Monatsname hört nun bei 11 auf und damit im November für das Textfeld und weiter geht es dann halt nicht mehr. Das führt uns nun zum dahinter liegenden Grundproblem von Arrays. Beginnen wir bei 0 oder 1. Das System wird immer bei 0 beginnen. Ab und zu kommt aber einem die Realität in den Weg. Hier wäre Android noch klar, selbst in der Dokumentation. Danach stellt sich aber die Frage, was eigentlich übergeben wird und wohin es zeigen soll. Hier treffen wohl wieder zwei Realitäten aufeinander. Übergeben wird der Pointer und nicht der Inhalt. Pech gehabt. Darum hier wieder einmal die Regeln und Fragen für Arrays und Gruppenbrüche:
- Wo beginnt der Array (0 oder 1)
- Wo endet der Array und habe ich Min und Max geprüft?
- Wie viel Grösser als das Maximum kann der Array werden?
- Wie ist der Array sortiert?
- Was wird übergeben, der Pointer oder der Inhalt?
- Was passiert bei leeren Arrays?
Damit sollte es eigentlich immer klappen. Darüber, dass dieser Fehler im Testing nicht aufgefallen ist, wollen wir jetzt nicht reden, das wäre wohl unfair. Weil in der Chinesischen und Japanischen Version läuft es ja. Spannend das Basisstrukturen nur einmal getestet werden und danach nie mehr. Scheint auch ein Pattern zu sein.