使用Configuration时,摩托罗拉在Android上的特定崩溃

时间:2010-07-08 08:19:28

标签: android motorola

由于我发布了对我的某个应用程序的大量更新,我收到了数百份崩溃报告,所有这些都来自不同的摩托罗拉手机。堆栈跟踪不会通过我的应用程序:

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)

只有在用户第一次启动应用时才会发生一次。我认为问题来自下面这段代码。此代码确实启动后应用程序始终使用英语,但用户可以选择使用另一种在我的SharedPreferences中保存在Constant.LOCALE的语言。程序第一次启动时,执行“else”-clause,可能会出现问题。但实际上,最奇怪的是我找不到其他只有摩托罗拉手机有问题的人。请注意,它可以在所有其他手机上完美运行。

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

1 个答案:

答案 0 :(得分:0)

我遇到了与摩托罗拉Quench类似的问题。 您可以通过进入设置 - >尝试检测您可以使用的区域设置。区域设置和时间 - >尝试单击英语或英语(加拿大)或您感兴趣的任何内容,并查看调试日志(使用DDMS)以查看返回的语言环境。 例如。 06-11 02:17:51.831:INFO / BlurServiceMother(129):onConfigurationChanged():locale已更改,登录告诉服务器:fr_FR

这将指示您可以使用的区域设置。

在我的情况下,我提供了“en”和“fr”作为2 Locale,但我们Quench没有可用,所以如果它没有改变为其中一个然后尝试“en_CA”或“fr_FR”如果它仍然失败,那么只需从方法返回(或显示相应的消息),表明该语言不受支持......

希望它有所帮助!