在对象实例化中使用字符串资源

时间:2013-11-19 17:48:21

标签: java android string

我想使用Strings.xml中定义的字符串资源,如下所示:

    <string name="game_name_nassau2">Nassau2</string>

当我实例化一个正在查看String参数的对象时。使用文字,我说:

private Game lGame = new Game(null,"Nassau2", lpl, 100, true, false, false, false);

这很好用。我试着使用字符串资源:

private Game lGame = new Game(null, getResources().getString(R.string.game_name_nassau2), lpl, 100, true, false, false, false);

这会导致应用崩溃。 (崩溃,意思是我在实例化时遇到“源未找到”错误)。我想成为一个好人而不是在代码中嵌入字符串。 这是LogCat错误......

    11-20 12:31:18.105: E/AndroidRuntime(7158): FATAL EXCEPTION: main
11-20 12:31:18.105: E/AndroidRuntime(7158): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.IllegalStateException: Unable to get package info for com.aci.golfgames; is package not installed?
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.LoadedApk.makeApplication(LoadedApk.java:509)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.ActivityThread.access$1300(ActivityThread.java:141)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.os.Looper.loop(Looper.java:137)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.ActivityThread.main(ActivityThread.java:5103)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at java.lang.reflect.Method.invokeNative(Native Method)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at java.lang.reflect.Method.invoke(Method.java:525)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at dalvik.system.NativeStart.main(Native Method)
11-20 12:31:18.105: E/AndroidRuntime(7158): Caused by: java.lang.IllegalStateException: Unable to get package info for com.aci.golfgames; is package not installed?
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:369)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.LoadedApk.getClassLoader(LoadedApk.java:322)
11-20 12:31:18.105: E/AndroidRuntime(7158):     at android.app.LoadedApk.makeApplication(LoadedApk.java:501)
11-20 12:31:18.105: E/AndroidRuntime(7158):     ... 11 more

我所改变的只是一行

    private Game lGame = new Game(null,"Nassau2", lpl, 100, true, false, false, false);

    private Game lGame = new Game(null, getResources().getString(R.string.game_name_nassau2), lpl, 100, true, false, false, false);

i,我改变的只有"Nassau2"getResources().getString(R.string.game_name_nassau2)。我在活动的第一个可执行行上设置了一个断点,它永远不会到达那里。

我做错了什么?

由于

2 个答案:

答案 0 :(得分:0)

  

这会导致应用崩溃。

目前尚不清楚您的意思,但在比较equals

时,您应该使用。==代替Strings

答案 1 :(得分:0)

当我说我正在使用

时,也许我不清楚
private Game lGame = new Game(null, getResources().getString(R.string.game_name_nassau2), lpl, 100, true, false, false, false);

在实例化中,它位于onCreate或对象内的任何其他方法之外。因此,我没有上下文,getResources().getString(...)需要上下文。似乎没有某种解决方案来获取上下文,这对应用程序资源不起作用。