Depuis que j'ai publié une mise à jour importante de l'une de mes applications, j'ai reçu des centaines de rapports d'erreur, tous provenant de différents téléphones Motorola. La trace de la pile ne passe pas à travers mon application:Crash spécifique à Motorola sur Android lors de l'utilisation Configuration
EXCEPTION
java.lang.NullPointerException
at android.content.res.Configuration.updateFrom(Configuration.java:269)
at android.content.res.Resources.updateConfiguration(Resources.java:1257)
at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:3701)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4246)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
at dalvik.system.NativeStart.main(Native Method)
Cela ne se produit qu'une seule fois, la première fois que l'utilisateur démarre l'application. Je pense que le problème vient de ce morceau de code ci-dessous. Ce code fait en sorte que l'application utilise toujours l'anglais au démarrage, mais l'utilisateur peut alors choisir d'utiliser une autre langue enregistrée dans Constant.LOCALE dans mes SharedPreferences. La première fois que le programme est démarré, la clause "else" est exécutée, il se peut que le problème se produise. Mais vraiment, la chose la plus étrange est que je ne peux pas trouver d'autres personnes qui ont des problèmes avec seulement les téléphones motorola. Notez que cela fonctionne parfaitement sur tous les autres téléphones.
public static void setCorrectLanguage(final Context context, final SharedPreferences preferences, final Editor editor) {
final Resources resource = context.getResources();
final Configuration cf = resource.getConfiguration();
final String choosenLanguage = preferences.getString(Constant.LOCALE, null);
final DisplayMetrics dm = resource.getDisplayMetrics();
if(choosenLanguage != null) {
cf.locale = new Locale(choosenLanguage);
resource.updateConfiguration(cf, dm);
} else {
cf.locale = new Locale("en");
resource.updateConfiguration(cf, dm);
editor.putString(Constant.LOCALE, "en");
editor.commit();
}
}
La seule chose que je peux voir est que vous supposez qu'il existe une locale en anglais. Existe-t-il un moyen pour Android d'obtenir les paramètres régionaux actuels et de les utiliser à la place? –