【问题标题】:`getResources().getString` generating exception`getResources().getString` 生成异常
【发布时间】:2018-12-11 05:40:15
【问题描述】:

在我的应用程序中,我有以下行:

String ci = getResources().getString(R.string.cidades);

这是在运行应用程序时引发异常。这只发生在Android 7.1和8版本,在之前的普通轮子中,有谁知道为什么?

Logcat:

java.lang.RuntimeException:无法启动活动 ComponentInfo{insidetechnology.studio.ostdor.anestesiaanimal/insidetechnology.studio.ostdor.anestesiaanimal.autenticacao.state}:java.lang.IndexOutOfBoundsException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 在 android.app.ActivityThread.-wrap11(未知来源:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 引起:java.lang.IndexOutOfBoundsException 在 android.content.res.StringBlock.nativeGetString(本机方法) 在 android.content.res.StringBlock.get(StringBlock.java:82) 在 android.content.res.AssetManager.getResourceValue(AssetManager.java:236) 在 android.content.res.AssetManager.getResourceText(AssetManager.java:164) 在 android.content.res.Resources.getText(Resources.java:334) 在 android.content.res.Resources.getString(Resources.java:432) 在 insidetechnology.studio.ostdor.anestesiaanimal.autenticacao.state.onCreate(state.java:38) 在 android.app.Activity.performCreate(Activity.java:6975) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 在 android.app.ActivityThread.-wrap11(未知来源:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

【问题讨论】:

  • 你在哪里打电话给getResources?也许您在它可用之前调用它?
  • @MattClark 在 onCreate 中,但这在旧版本中有效:/

标签: android


【解决方案1】:

解决方法可以使用string-array 而不是string

<string-array name="items">
<item>item0</item>
<item>item1</item>
...
</string-array>

然后

String[] items = getResources().getStringArray(R.array.items);

我不知道为什么,但也许你的字符串超出了新 Android 版本中字符串资源的限制

【讨论】:

  • 我会试着告诉你
  • 我如何获得这个数组的索引?
  • 还是完成了?
猜你喜欢
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2013-04-25
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多