因此,我正在使用法语本地化我的应用程序以使用不同的语言,并且遇到了一个奇怪的问题。
创建活动后,我致电getActionBar().setDisplayHomeAsUpEnabled(true);
。这在我的Nexus 7上用英语和法语进行测试时效果很好,并且在使用默认(英语)资源时可以在我的Nexus 4上正常工作。
但是,如果我尝试使用法语在我的Nexus 4上启动有问题的活动(即手机设置为法语,但如果我尝试将应用程序强制为法语,也会出现问题),应用程序崩溃,用Eclipse告诉我有一个空指针异常。我确定问题是setDisplayHomeAsUpEnabled()
来电。
传递false
代替true
也会崩溃。在不进行任何进一步调用的情况下调用getActionBar()
不会导致应用程序崩溃。应用程序是根据Master-Detail流程设置的(因此应用程序的核心是两个Activity-Fragment对,一个List和一个Detail),我认为这是为什么Nexus 7版本可以正常工作,尽管Nexus 4版本崩溃。
我已经仔细检查了我的values
和values-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
答案 0 :(得分:2)
所以对于那些感兴趣的人,虽然我没有发现问题背后的原因,但我发现我可以阻止它。我开始本地化时所做的是复制整个values
文件夹并附加语言代码,使其成为values-fr
。文件夹中有两个文件strings.xml
和styles.xml
,后者在默认版本和-fr
版本中都相同。
从styles.xml
删除values-fr
,但在values
中保留原样,解决了问题(并且还阻止了法语界面与英文版本不同)。
答案 1 :(得分:0)
确保两件事: 1)通过在onCreate方法的顶部使用@SuppressLint(“NewApi”)来抑制Lint错误。 (我猜你可能已经做过了!) 2)您必须包含Android清单文件中指定的minSdk。 保留这些行:(紧跟清单标记之后)
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
希望有所帮助!