java.lang.NullPointer getResources()中的异常.getString(R.string.value);

时间:2014-01-30 12:17:47

标签: java android xml

我想在所有活动中使用一个常量值,所以我将它写在string.xml文件中。

现在,要在.java文件中获取该值,我将编写如下代码:

getResources().getString(R.string.my_website); - This is 18 line of Splash Class

我在主类中调用此代码,如下所示:

public class Splash extends Activity {
    final String WebsiteURL = getResources().getString(R.string.my_website);
}

但它给了我java.lang.NullPointerException。我写错了吗?

这是相关的 strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="my_website">http://www.mytestbuddy.com</string>
</resources>

logcat的:

01-30 17:57:15.853: E/AndroidRuntime(1553): FATAL EXCEPTION: main
01-30 17:57:15.853: E/AndroidRuntime(1553): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.Mobile.mytestbuddy/com.Mobile.mytestbuddy.Splash}: java.lang.NullPointerException
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.os.Looper.loop(Looper.java:130)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.ActivityThread.main(ActivityThread.java:3683)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at java.lang.reflect.Method.invokeNative(Native Method)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at java.lang.reflect.Method.invoke(Method.java:507)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at dalvik.system.NativeStart.main(Native Method)
01-30 17:57:15.853: E/AndroidRuntime(1553): Caused by: java.lang.NullPointerException
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at com.Mobile.mytestbuddy.Splash.<init>(Splash.java:18)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at java.lang.Class.newInstanceImpl(Native Method)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at java.lang.Class.newInstance(Class.java:1409)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-30 17:57:15.853: E/AndroidRuntime(1553):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
01-30 17:57:15.853: E/AndroidRuntime(1553):     ... 11 more

3 个答案:

答案 0 :(得分:7)

根据您的编辑,您在创建活动之前尝试访问资源。这是不可能的,因为在此期间尚未提供所需的Context

您需要在websiteUrl方法中设置onCreate(...)

- 旧答案供参考 -

 getResources().getString(R.string.my_website);

如您所见,string必须以小写形式编写。此外,您不应该寻找Integer而是String

答案 1 :(得分:2)

你必须使用

getResources().getString(R.string.my_website);

使用getInteger更改getString,使用String更改string(小写s

getString初始化之前,您无法致电Activity。这是因为getStringcontext.getResources().getString()相同。 context未初始化

有关详细信息,请参阅this

答案 2 :(得分:0)

您需要在

之后添加getResources().getString(R.string.my_website);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

访问资源,因为Activity需要init。