2014-01-30 73 views
3

我想在所有活動中使用一個常量值,所以我將它寫入了string.xml文件。getResources()中的java.lang.NullPointer異常。getString(R.string.value);

現在,到獲得的.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

我已更新我的答案以適合您的編輯。 – keyboardsurfer

回答

7

根據您的編輯你想在創建活動之前訪問的資源。這是不可能的,因爲在此期間所需的Context尚未提供。

您需要從onCreate(...)方法中設置您的websiteUrl

--old回答reference--

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

正如你所看到的,string在小寫寫入。你也不應該找Integer,而是String

+0

抱歉我的錯誤,但我已經寫了小寫字符串。 –

+0

這很好。無論如何,如果您使用了大寫字母,應用程序就不應該編譯。儘管如此,這個問題意味着這首先是問題的一部分。 – keyboardsurfer

+1

謝謝,它已經解決了我的問題... –

2

必須使用

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

變化getIntegergetStringStringstring(小寫s

Activity被初始化之前你不能叫getString。這是因爲getStringcontext.getResources().getString()相同。而context沒有初始化

更多信息,請參閱this

+0

謝謝。這是我的錯誤在後。我正在寫getString,但也是我得到同樣的錯誤。 –

+0

請清理您的項目,然後再試一次 –

+0

getResources()。getString(R.string.my_website);是Splash類的18行 –

0

你需要把getResources().getString(R.string.my_website);

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

訪問資源,因爲活動需要初始化。

相關問題