2014-01-30 45 views
0

更改设备的语言后,我的应用程序崩溃。在更改语言时,应用程序在后台运行。错误是更改语言后,应用程序在getResources()中崩溃

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) 

回答

1

尝试根据谷歌规范建设的资源文件夹:

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

除了同意@SQLiteNoob以外,不能做任何其他事情,请遵循Google规范,并在给定链接上阅读本地化的mor。你似乎没有遵循规范(资源结构),因此你会得到NPE。 – Robert

+0

其实我有这个结构。也许它与片段/活动有关?因为它发生在应用程序在后台。 – user1908375

+0

如果你调用一个不是所需语言的字符串,你也可以从它得到一个NPE - 检查? – SQLiteNoob

0

如果您在值来定义你的字符串目录,那么它必须由于Android最初试图从特定语言创建的目录调整字符串,如果该目录不正常工作Android预计是包含您的字符串的最后一个。

为获得NullPointerException异常唯一可能的情况是,你在值创建目录特定语言并没有提供默认以该字符串或目录中的语言,您切换您的手机至。

请给我们提供stackTrace。如果你的应用程序在后台,那么它可能已被系统终止,并且你的NPE不关心获取字符串。

+0

我有4种语言,en,fr,ru和de。我的目录结构是: res/ values/ values-de/ values-fr/ values-ru – user1908375

+0

请调用这种情况并粘贴完整的堆栈跟踪。 –

+0

编辑meassage ....但我认为NullPointer不是关于字符串资源,但活动......它可能是? – user1908375