2012-02-25 52 views
0

我想聲明一個字符串數組,我將在我的代碼中使用它。我已經完成了這兩種方式,我認爲這兩種方式都是可行的選擇,但是有一種方式會導致我的應用在加載時崩潰而不失敗。聲明導致問題的字符串陣列

工作代碼:

private String[] list = {"apple", "pear"}; 

工作代碼:

Resources res = getResources(); 
private String[] list = res.getStringArray(R.array.Fruit); 

奇怪的是,後者的代碼被複制直接從Android字符串資源頁面。我已經確定數組(在這種情況下標題爲Fruit)存在,我現在有點失落。

登錄貓錯誤我收到如下:

02-25 12:38:18.015: ERROR/AndroidRuntime(605): FATAL EXCEPTION: main 
02-25 12:38:18.015: ERROR/AndroidRuntime(605): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ikiar.appname/com.ikiar.appname.Main}: java.lang.NullPointerException 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.os.Looper.loop(Looper.java:123) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at dalvik.system.NativeStart.main(Native Method) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717): Caused by: java.lang.NullPointerException 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at com.ikiar.appname.Main.<init>(Main.java:24) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at java.lang.Class.newInstanceImpl(Native Method) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at java.lang.Class.newInstance(Class.java:1429) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
02-25 12:58:52.284: ERROR/AndroidRuntime(717):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 

謝謝您的幫助!

編輯:更多的日誌目錄信息,死機的代碼@位置的行添加

@崩潰的位置:

Resources res = getResources(); 

解決方案:

感動將Resources res - getResources();的位置寫入onCreate方法。

+0

在'values'文件夾中是否有一個名爲'array'的xml文件,名爲'Fruit'的字符串數組? – Luksprog 2012-02-25 17:48:37

+0

在'strings.xml'文件裏面,我有一個名爲'Fruit'的'string-array'。 – gkiar 2012-02-25 17:49:27

回答

2

您已將string-array設置爲string.xml文件。如果你想使用:

private String[] list = res.getStringArray(R.array.Fruit); 

嘗試創建一個array.xml文件中的文件夾values有把你Fruit陣列。

+0

這樣做後,它仍然墜毀。 :/ – gkiar 2012-02-25 17:56:53

+0

@iKiar你可以發佈確切的行,你得到'NullPointerException'。 – Luksprog 2012-02-25 17:58:30

+0

愚蠢的問題,我怎麼能從錯誤代碼中確定它墜毀的確切線? (我對Java比較陌生) – gkiar 2012-02-25 18:05:34

0

你會得到一個空指針異常。我猜「res」是空的。 System.out.println(res)說什麼!?當它說「空」,那麼你的水庫沒有正確加載。

+0

這應該可能是一個評論,而不是一個答案。 (雖然我意識到,行動可能還沒有啓用你:) – Leigh 2012-02-26 03:51:45