2010-07-08 5 views
1

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(); 
    } 
} 
+0

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? –

Répondre

0

J'ai rencontré un problème similaire avec Motorola Quench. Vous pouvez essayer de détecter les paramètres régionaux disponibles en accédant à Paramètres -> Paramètres régionaux et heure -> Essayez de cliquer sur Anglais ou Anglais (Canada) ou sur tout ce qui vous intéresse et consultez les journaux de débogage (à l'aide de DDMS). les paramètres régionaux sont retournés. Par exemple. 06-11 02: 17: 51.831: INFO/BlurServiceMother (129): onConfigurationChanged(): paramètres régionaux modifiés, connexion au serveur: fr_FR

Ceci indiquera les paramètres régionaux disponibles. Dans mon cas, je fournissais "en" et "fr" en tant que 2 Locale mais nous l'éteindre n'a pas non plus disponible, donc si elle ne passait pas à l'un d'entre eux, alors essayez "en_CA" ou "fr_FR" "et si elle échoue toujours alors revenez de la méthode (ou affichez le message approprié) indiquant que la langue n'est pas supportée ...

Espérons que ça aide!

+0

Je vais examiner cela. Cependant, je ne pense pas que ce soit la réponse, il est possible de changer pour une locale qui n'existe pas pour une application. J'ai personnellement implémenté les paramètres régionaux suédois pour mon application, avec un dossier "values-se" qui est correctement utilisé après avoir défini les paramètres régionaux sur "se". Même si les paramètres régionaux ne sont pas disponibles dans les paramètres régionaux normaux du téléphone. – pgsandstrom

Questions connexes