更改语言后,应用程序在getResources()中崩溃

时间:2014-01-30 22:48:42

标签: android android-activity actionbarsherlock fragment

我更改设备语言后,我的应用崩溃了。在更改语言期间,应用程序在后台运行。错误是

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)

2 个答案:

答案 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无需获取字符串。