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