Warum warnt Android Lint vor String.format, das das Standardgebietsschema verwendet, wenn explizit Locale.US verwendet wird?

Lesezeit: 3 Minuten

Ich habe ursprünglich angerufen String.format Hier entlang:

return String.format("%s %f %f", anotherString, doubleA, doubleB);

Was dazu führte, dass Android Lint diese Warnung generierte:

Die implizite Verwendung des Standardgebietsschemas ist eine häufige Fehlerquelle: Verwenden Sie stattdessen String.format(Locale, …).

Also habe ich es geändert, um es zu verwenden Locale.US ausdrücklich, basierend auf dem, was ich gelesen habe http://developer.android.com/reference/java/util/Locale.html im Abschnitt „Achten Sie auf das Standardgebietsschema“:

return String.format(Locale.US, "%s %f %f", anotherString, doubleA, doubleB);

Warum generiert Android Lint immer noch dieselbe Warnung? Ich muss das Projekt in Eclipse bereinigen, um es loszuwerden, wenn die meisten Warnungen einfach verschwinden, sobald die fehlerhafte Zeile behoben ist. Ich bin mir nicht sicher, ob ich etwas falsch mache oder nicht.

  • Fusselwarnung ist überhaupt kein Fehler. Es versucht nur, Sie über Leistung, Übersetzung und ähnliche Probleme zu informieren. Ich erhalte diese Warnung auch in Apps, die ich nur auf eine bestimmte Sprache ausrichten möchte, aber Sie können Lint jederzeit deaktivieren, indem Sie zu Fenster> Einstellungen> Android> Lint-Fehlerprüfung gehen. Ich glaube, dass es im schlimmsten Fall ein Gerät geben könnte, auf dem Locale.US überhaupt nicht verfügbar ist, und daher einige Probleme verursachen kann. Bisher bin ich aber noch nie mit solchen konfrontiert worden.

    – Mailand

    5. Juni 2013 um 3:05 Uhr


Das Bereinigen und Wiederherstellen des Projekts sollte funktionieren.

BTW, möchten Sie vielleicht verwenden Locale.getDefault() sich um Texte kümmern, die nicht in Englisch verfasst sind.

  • Er versucht ausdrücklich, den Ausfall zu vermeiden.

    – nitind

    4. Juni 2013 um 23:23 Uhr

  • Was ich verstanden habe, versucht er, es zu vermeiden, nur wegen des Abschnitts “Vorsicht vor dem Standardgebietsschema” in der Dokumentation. Trotzdem sage ich ihm, dass er es “vielleicht verwenden möchte”, da es wirklich sagt, dass Sie sich bewusst sein sollten, das Standardgebietsschema in der Kommunikation von Maschine zu Maschine zu verwenden.

    – Alejandro Colorado

    5. Juni 2013 um 7:41 Uhr


  • Ich verwende für diesen Fall immer Locale.ROOT. Und durch die Reinigung wird die Fusselwarnung beseitigt, wie Alejandro feststellte.

    – suomi35

    9. Januar 2014 um 6:29 Uhr

  • FIY public static String format(String format, Object… args) { return format(Locale.getDefault(), format, args); }

    – Manza

    13. Juli 2016 um 10:00 Uhr


Als ich das Gebietsschema mit dem Format erwähnte, verschwand die Fusselwarnung einfach.

String.format(Locale.US,"%02d", selectedInt);

Implizites Standardgebietsschema bei Fallkonvertierung

Berufung String#toLowerCase() oder #toUpperCase() ohne Angabe eines expliziten Gebietsschemas ist eine häufige Fehlerquelle. Der Grund dafür ist, dass diese Methoden das aktuelle Gebietsschema auf dem Gerät des Benutzers verwenden und Auch wenn der Code beim Entwickeln der App korrekt zu funktionieren scheint, schlägt er in einigen Gebietsschemata fehl. Im türkischen Gebietsschema ist der Großbuchstabenersatz für i beispielsweise nicht I.

Wenn Sie möchten, dass die Methoden nur eine ASCII-Ersetzung durchführen, um beispielsweise einen Aufzählungsnamen zu konvertieren, rufen Sie auf String#toUpperCase(Locale.US) stattdessen. Wenn Sie wirklich das aktuelle Gebietsschema verwenden möchten, rufen Sie an String#toUpperCase(Locale.getDefault()) stattdessen.

http://developer.android.com/reference/java/util/Locale.html#default_locale

Fügen Sie einfach Ihr Gebietsschema hinzu; für englisches Gebietsschema,

return String.format(Locale.ENGLISH,”%s %f %f”, anotherString, doubleA, doubleB);

1245520cookie-checkWarum warnt Android Lint vor String.format, das das Standardgebietsschema verwendet, wenn explizit Locale.US verwendet wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy