Motorola Special Crash на Android при использовании конфигурации

StackOverflow https://stackoverflow.com/questions/3201763

  •  12-09-2020
  •  | 
  •  

Вопрос

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

Это только один раз, первый раз, когда пользователь запускает приложение.Я думаю, что проблема исходит из этого куска кода ниже.Этот код делает так, чтобы приложение всегда использует английский при запуске, но затем пользователь может выбрать использовать другой язык, который сохраняется в Constance.locale в моих SharedPreferences.Первый раз, когда программа запускается, выполняется «else» -Clause, это может быть там, что проблема возникает.Но на самом деле самое странное в том, что я не могу найти других людей, у которых проблемы с телефонами только 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();
    }
}
.

Это было полезно?

Решение

Я столкнулся с аналогичной проблемой с мотогеном Motorola. Вы можете попробовать обнаружить, в какой доступ к вам доступны локаль, переходя в настройки -> локаль и время -> попробуйте нажать на английском языке или на английском языке (CANADA) или что вы заинтересованы и просматривайте журналы отладки (используя DDMS), чтобы увидетьЛокаль вернулся. Например. 06-11 02: 17: 51.831: info / blurservicemote (129): onconfigurationChanged (): Locale изменился, вход в систему, чтобы сообщить серверу: FR_FR

Это укажет локаль, доступную вам.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top