2010-07-08 79 views
1

由於我發佈了對我的應用程序之一的大型更新,我收到了數百份碰撞報告,全部來自不同的摩托羅拉手機。堆棧跟蹤沒有通過我的應用程序:使用配置時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(); 
    } 
} 
+0

我能看到的唯一的事情就是假設英語語言環境存在。 Android中有沒有辦法獲得當前的語言環境並使用它? – 2010-07-08 15:17:53

回答

0

我遇到了Motorola Quench的類似問題。 您可以嘗試通過進入設置 - >語言環境和時間 - >嘗試點擊英語或英語(加拿大)或任何您感興趣的內容並查看調試日誌(使用DDMS)來查看可用的區域設置。返回的語言環境。例如, 2月6日至十一日:17:51.831:信息/ BlurServiceMother(129):onConfigurationChanged():語言環境改變,登錄到服務器訴說:fr_FR時

這將指示提供給您的Locale。

在我的情況下,我提供了「en」和「fr」作爲2 Locale,但我們Quench沒有可用,所以如果它沒有改變爲其中的一個,則嘗試「en_CA」或「fr_FR 「如果它仍然失敗,那麼只是從方法返回(或顯示適當的消息),表明該語言不支持...

希望它有幫助!

+0

我會研究這個。但是我不認爲這是答案,它可以改變爲一個應用程序不存在的語言環境。我個人爲我的應用程序實現了瑞典語區域設置,並在將語言環境設置爲「se」後正確使用了「values-se」文件夾。即使在電話中正常的語言環境設置下語言環境不可用。 – pgsandstrom 2010-07-09 09:12:04