2

所以我正在为不同语言本地化我的应用程序,从法语开始,遇到了一个奇怪的问题。

创建活动后,我调用getActionBar().setDisplayHomeAsUpEnabled(true);. 这在我的 Nexus 7 上以英语和法语测试时效果很好,在我的 Nexus 4 上使用默认(英语)资源时效果很好。

但是,如果我尝试在我的 Nexus 4 上用法语启动有问题的活动(即手机设置为法语,但如果我尝试强制应用程序进入法语也会出现问题),应用程序崩溃,Eclipse 告诉我有一个空指针异常。我确定问题出在setDisplayHomeAsUpEnabled()电话上。

通过false而不是true也崩溃。在不进行任何进一步调用的情况下调用getActionBar()不会使应用程序崩溃。该应用程序是根据 Master-Detail 流程设置的(因此应用程序的核心是两个 Activity-Fragment 对,一个 List 和一个 Detail),我认为这就是为什么 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
4

2 回答 2

2

所以对于那些感兴趣的人,虽然我没有发现问题背后的原因,但我发现我可以阻止它。当我开始本地化时,我所做的是复制整个values文件夹并附加语言代码,使其成为values-fr. 文件夹中有两个文件,strings.xmlstyles.xml,后者在默认和-fr版本中是相同的。

styles.xml从中删除values-fr,但在 中保持原样values,解决了问题(并且还阻止了法语界面看起来与英语版本不同)。

于 2013-04-28T15:21:08.070 回答
0

确保两件事:1)您通过在 onCreate 方法顶部使用 @SuppressLint("NewApi") 抑制了 Lint 错误。(我猜你可能已经这样做了!) 2) 你必须包含在 Android 清单文件中指定的 minSdk。保留这些行:(就在清单标记之后)

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

希望有帮助!

于 2013-08-20T05:04:21.757 回答