代码之家  ›  专栏  ›  技术社区  ›  pgsandstrom

使用配置时Android上摩托罗拉特有的崩溃

  •  1
  • pgsandstrom  · 技术社区  · 14 年前

    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)
    

    这种情况只会发生一次,即用户第一次启动应用程序时。我认为问题来自下面的代码。此代码使应用程序在启动时始终使用英语,但用户可以选择使用另一种保存在我的SharedReferences中的Constant.LOCALE中的语言。当程序第一次启动时,执行“else”子句,问题可能就出现在那里。但真的,最奇怪的是,我找不到其他人有问题,只有摩托罗拉手机。请注意,它在所有其他手机上都能完美地工作。

    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 回复  |  直到 14 年前
        1
  •  0
  •   jagsaund    14 年前

    您可以尝试通过进入“设置”来检测可用的区域设置->区域设置和时间->试着点击English或English(Canada)或任何你感兴趣的东西,并查看调试日志(使用DDMS)以查看返回的区域设置。 如。 06-11 02:17:51.831:INFO/blurservicemather(129):onConfigurationChanged():区域设置已更改,登录以通知服务器:fr\u fr

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

    在我的例子中,我提供了“en”和“fr”作为2个区域设置,但是我们没有任何一个可用的淬灭,所以如果它无法更改为其中一个,那么请尝试“en\u CA”或“fr\u fr”,如果它仍然失败,那么只需从方法返回(或显示适当的消息),表明该语言不受支持。。。

    希望有帮助!