2013-04-27 28 views
2

所以我在我的本地化應用程序爲不同的語言,開始與法國的過程中,所遇到的一個奇怪的問題。Android的 - getActionBar()setDisplayHomeAsUpEnabled()崩潰的應用程序,只在小屏幕法國

在創建一個活動,我稱之爲getActionBar().setDisplayHomeAsUpEnabled(true);。使用英文和法文在我的Nexus 7上進行測試時,此工作正常,並且在使用默認(英文)資源時可以在我的Nexus 4上正常工作。但是,如果我嘗試在我的Nexus 4上用法語開始有問題的活動(即手機設置爲法語,但如果我嘗試強制將應用程序變爲法語也會出現問題,無論如何),應用程序崩潰,Eclipse告訴我有一個空指針異常。我確定問題是撥打setDisplayHomeAsUpEnabled()

傳遞false代替true也崩潰。調用getActionBar()而不進行任何進一步調用不會使應用程序崩潰。該應用程序根據主 - 細節流設置(所以應用程序的核心是兩個活動 - 片段對,一個列表和一個細節),我認爲這是爲什麼Nexus 7版本可以正常工作,儘管Nexus 4版本崩潰。

我已經仔細檢查了我的valuesvalues-fr文件夾,並且我確信values-fr中沒有丟失或額外的資源。

任何線索,爲什麼這可能發生?

這裏是logcat的告訴我:

04-27 15:13:44.968: D/AndroidRuntime(4244): Shutting down VM 
04-27 15:13:44.968: W/dalvikvm(4244): threadid=1: thread exiting with uncaught exception (group=0x41429930) 
04-27 15:13:44.978: E/AndroidRuntime(4244): FATAL EXCEPTION: main 
04-27 15:13:44.978: E/AndroidRuntime(4244): java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.hachesoftware.soilbearingcapacity/ca.hachesoftware.soilbearingcapacity.ScreenDetailActivity}: java.lang.NullPointerException 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.os.Looper.loop(Looper.java:137) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at dalvik.system.NativeStart.main(Native Method) 
04-27 15:13:44.978: E/AndroidRuntime(4244): Caused by: java.lang.NullPointerException 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at ca.hachesoftware.soilbearingcapacity.ScreenDetailActivity.onCreate(ScreenDetailActivity.java:34) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.Activity.performCreate(Activity.java:5104) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
04-27 15:13:44.978: E/AndroidRuntime(4244):  ... 11 more 
+3

張貼堆棧跟蹤將有助於。 – CommonsWare 2013-04-27 19:27:59

+0

在上面添加了日誌信息。 – GarrickW 2013-04-27 19:34:10

+0

什麼是ScreenDetailActivity的第34行? – CommonsWare 2013-04-27 19:35:52

回答

2

因此,對於那些有興趣誰,雖然我沒有發現問題背後的原因,我發現我可以阻止它。當我開始本地化時,我所做的是複製整個values文件夾並附加語言代碼,使其成爲values-fr。有兩個文件夾中,strings.xmlstyles.xml,其中後者是在缺省值和-fr版本相同。

values-fr刪除styles.xml,但在values中保留完好,解決了問題(並且防止了法文界面與英文版不同)。

+0

你救了我一天! :) – Angudroid 2013-12-20 14:01:18

0

確保2件事: 1)您已通過在onCreate方法的頂部添加@SuppressLint(「NewApi」)來抑制Lint錯誤。 (我猜你可能已經完成了!) 2)您必須包含Android清單文件中指定的minSdk。 保留這些行:(只清單標籤後右)

<uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 

希望幫助!

相關問題