Android getString(R.string.res_name)给出java.lang.IndexOutOfBoundsException

Android getString(R.string.res_name)给出java.lang.IndexOutOfBoundsException,android,string,android-activity,android-8.0-oreo,Android,String,Android Activity,Android 8.0 Oreo,我遇到了一个不寻常的问题。当我在我的活动(LevelTwoActivity)中访问字符串资源时,它给了我以下问题 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/com.package.LevelTwoActivity}: java.lang.IndexOutOfBoundsException at android.app.ActivityThrea

我遇到了一个不寻常的问题。当我在我的
活动
(LevelTwoActivity)中访问字符串资源时,它给了我以下问题

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/com.package.LevelTwoActivity}: java.lang.IndexOutOfBoundsException
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2906)
                  at android.app.ActivityThread.-wrap11(Unknown Source:0)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1605)
                  at android.os.Handler.dispatchMessage(Handler.java:105)
                  at android.os.Looper.loop(Looper.java:172)
                  at android.app.ActivityThread.main(ActivityThread.java:6637)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
               Caused by: java.lang.IndexOutOfBoundsException
                  at android.content.res.StringBlock.nativeGetString(Native Method)
                  at android.content.res.StringBlock.get(StringBlock.java:82)
                  at android.content.res.AssetManager.getResourceValue(AssetManager.java:236)
                  at android.content.res.AssetManager.getResourceText(AssetManager.java:164)
                  at android.content.res.Resources.getText(Resources.java:334)
                  at android.content.Context.getText(Context.java:543)
                  at com.package.LevelTwoActivity.loadArraysFromResources(LevelTwoActivity.java:1586)
                  at com.package.LevelTwoActivity.onCreate(LevelTwoActivity.java:133)
                  at android.app.Activity.performCreate(Activity.java:6975)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2784)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2906) 
                  at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1605) 
                  at android.os.Handler.dispatchMessage(Handler.java:105) 
                  at android.os.Looper.loop(Looper.java:172) 
                  at android.app.ActivityThread.main(ActivityThread.java:6637) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
 E/Jellow: exception caught
      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dsource.idc.jellowintl/com.package.LevelTwoActivity}: java.lang.IndexOutOfBoundsException
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2906)
          at android.app.ActivityThread.-wrap11(Unknown Source:0)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1605)
          at android.os.Handler.dispatchMessage(Handler.java:105)
          at android.os.Looper.loop(Looper.java:172)
          at android.app.ActivityThread.main(ActivityThread.java:6637)
          at java.lang.reflect.Method.invoke(Native Method)
          at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
       Caused by: java.lang.IndexOutOfBoundsException
          at android.content.res.StringBlock.nativeGetString(Native Method)
          at android.content.res.StringBlock.get(StringBlock.java:82)
          at android.content.res.AssetManager.getResourceValue(AssetManager.java:236)
          at android.content.res.AssetManager.getResourceText(AssetManager.java:164)
          at android.content.res.Resources.getText(Resources.java:334)
          at android.content.Context.getText(Context.java:543)
          at com.package.LevelTwoActivity.loadArraysFromResources(LevelTwoActivity.java:1586)
          at com.package.LevelTwoActivity.onCreate(LevelTwoActivity.java:133)
          at android.app.Activity.performCreate(Activity.java:6975)
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2784)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2906) 
          at android.app.ActivityThread.-wrap11(Unknown Source:0) 
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1605) 
          at android.os.Handler.dispatchMessage(Handler.java:105) 
          at android.os.Looper.loop(Looper.java:172) 
          at android.app.ActivityThread.main(ActivityThread.java:6637) 
          at java.lang.reflect.Method.invoke(Native Method) 
          at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
代码行如下所示

    LevelTwoVerbiageModel verbiageModel = new Gson()
            .fromJson(getString(R.string.levelTwoVerbiage), LevelTwoVerbiageModel.class);
字符串reosurce如下所示:

<string name="levelTwoVerbiage">
    {\"arrays\":[[[
        \"I like to greet others\",
        \"I really like to greet others\",
        \"I want to greet others\"],[],[],
        ....
        ....
        \"I really don’t want\",
        \"I don’t feel very safe\",
        \"I really don’t feel very safe\"
]]]}
</string>
我无法确定为什么访问字符串资源会给我:
java.lang.IndexOutOfBoundsException.

有人知道哪里出了问题吗

提前谢谢。
-Rahul

@Rahul-我不知道为什么Android Oreo会抛出这个异常。这可能是由于字符串资源中使用的字符数增加了限制。对我来说,使用一个大约135000个字符的字符串似乎是一种糟糕的做法。相反,我建议您使用
字符串数组
,然后在代码中将其作为字符串数组
字符串[]
,然后使用它

这样,您甚至不需要使用Gson来解析Json

例如:

strings.xml


将其用作
myItems[index\u you\u want\u访问]

我们可以查看您的LevelTwoActivity吗?看起来您正在加载数组>>loadArraysFromResources,该问题可能与getStringPost your strings.xml和您试图访问它的活动代码无关。在strings.xml中使用包含135000个字符的字符串而不是添加原始资源文件有什么原因吗?@ZUNJAE该文件具有区域版本。如果将其保存为值。根据地区获取字符串资源将很有帮助。感谢您的帮助。我发现他们在这个安全更新中已经改变了。@ RahulJidge考虑接受或投票,如果有任何帮助的话。谢谢。@Rabbit先生:谢谢你的解决方案。这对我也很管用。但是你怎么知道这是个问题,135000是个极限?@akashPatra-我只是提供了更好的实践来实施这种情况,而不是解决方案。另外,提问者提到了他使用的绳子的长度(135000),我不知道确切的限制。
Device name: MI A1
Android version: 8.0.0
Android patch level: 1 April 2018
Build number: OPR1.170623.026.V9.5.10.0.DHMIFA
<string-array name="my_items">
    <item>Item1</item>
    <item>Item2</item>
    <item>Item3</item>
    ...
</string-array>
String[] myItems = getResources().getStringArray(R.array.my_items);