我更改设备语言后,我的应用崩溃了。在更改语言期间,应用程序在后台运行。错误是
java.lang.NullPointerException
错误消息指向此调用(在SherlockFragment
内)
tv.setText(getActivity().getResources().getString(R.string.d));
我该怎么做才能避免此错误?
我的文件夹结构是:
res/
values/strings.xml
values-de/strings.xml
values-fr/strings.xml
完整日志:
01-30 23:41:30.150: E/AndroidRuntime(17414): FATAL EXCEPTION: main
01-30 23:41:30.150: E/AndroidRuntime(17414): java.lang.NullPointerException
01-30 23:41:30.150: E/AndroidRuntime(17414): at com.myapp.countdown.CountdownFragment$1.onTick(CountdownFragment.java:58)
01-30 23:41:30.150: E/AndroidRuntime(17414): at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:124)
01-30 23:41:30.150: E/AndroidRuntime(17414): at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 23:41:30.150: E/AndroidRuntime(17414): at android.os.Looper.loop(Looper.java:137)
01-30 23:41:30.150: E/AndroidRuntime(17414): at android.app.ActivityThread.main(ActivityThread.java:4921)
01-30 23:41:30.150: E/AndroidRuntime(17414): at java.lang.reflect.Method.invokeNative(Native Method)
01-30 23:41:30.150: E/AndroidRuntime(17414): at java.lang.reflect.Method.invoke(Method.java:511)
01-30 23:41:30.150: E/AndroidRuntime(17414): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
01-30 23:41:30.150: E/AndroidRuntime(17414): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
01-30 23:41:30.150: E/AndroidRuntime(17414): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
根据Google规范尝试构建资源文件夹:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
因为Android会自动使用设备使用的语言中的资源。 点击此处了解更多信息:
http://developer.android.com/training/basics/supporting-devices/languages.html
答案 1 :(得分:0)
如果您在 values 目录中定义了字符串,那么它必须正常工作,因为Android首先尝试调整为特定语言创建的目录中的字符串,如果该目录不存在,Android需要值是包含字符串的最后一个。
获取NullPointerException的唯一可能方案是您在 values 目录中为特定语言创建了 string ,但没有提供默认的值此字符串或带有您将手机切换到的语言的值目录。
请向我们提供stackTrace。如果您的应用程序处于后台,那么它可能已被系统终止,您的NPE无需获取字符串。