我想在所有活动中使用一个常量值,所以我将它写在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
答案 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
。这是因为getString
与context.getResources().getString()
相同。 context
未初始化
有关详细信息,请参阅this
答案 2 :(得分:0)
您需要在
之后添加getResources().getString(R.string.my_website);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
访问资源,因为Activity需要init。