Сбой Motorola на Android при использовании конфигурации - PullRequest
1 голос
/ 08 июля 2010

С тех пор как я опубликовал большое обновление для одного из моих приложений, я получил сотни отчетов о сбоях, все с разных телефонов 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)

Это происходит только один раз, при первом запуске приложения пользователем.Я думаю, что проблема заключается в следующем фрагменте кода ниже.Этот код делает так, что приложение всегда использует английский при запуске, но затем пользователь может выбрать другой язык, который сохраняется в Constant.LOCALE в моих SharedPreferences.Когда программа запускается в первый раз, выполняется условие "else", возможно, именно там возникает проблема.Но на самом деле, самое странное, что я не могу найти других людей, у которых проблемы только с телефонами Motorola.Обратите внимание, что он работает безупречно на всех других телефонах.

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 голосов
/ 09 июля 2010

Я столкнулся с похожей проблемой с Motorola Quench.Вы можете попытаться определить, какие локали доступны вам, перейдя в «Настройки» -> «Язык и время» -> Попробуйте щелкнуть по английскому или английскому (Канада) или по любому, что вас интересует, и просмотрите журналы отладки (используя DDMS), чтобы увидетьлокаль вернулась.Например.06-11 02: 17: 51.831: INFO / BlurServiceMother (129): onConfigurationChanged (): локаль изменена, войдите в систему, чтобы сообщить серверу: fr_FR

Это будет указывать на доступную вам локаль.

В моем случае я поставлял "en" и "fr" как 2 локали, но у нас Quench не было ни одного из доступных, поэтому, если ему не удалось перейти на один из них, попробуйте "en_CA" или "fr_FR", и еслион все равно не работает, а затем просто возвращается из метода (или отображает соответствующее сообщение), указывая, что язык не поддерживается ...

Надеюсь, это поможет!

...