2012-02-25 27 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