由於我發佈了對我的應用程序之一的大型更新,我收到了數百份碰撞報告,全部來自不同的摩托羅拉手機。堆棧跟蹤沒有通過我的應用程序:使用配置時Android上的摩托羅拉特定崩潰
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」 - 條款,可能會出現問題。但真的,最奇怪的是,我找不到其他人只有摩托羅拉手機有問題。請注意,它可以在所有其他手機上完美地工作。
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();
}
}
我能看到的唯一的事情就是假設英語語言環境存在。 Android中有沒有辦法獲得當前的語言環境並使用它? – 2010-07-08 15:17:53