Android Java ArrayIndexOutOfBoundsException

时间:2017-12-18 13:21:58

标签: java android

我有一些TextView,可以根据SharedPreferences中保存的值设置文本。使用“@”将值拆分为数组。

SharedPreferences mark = getSharedPreferences(PREFS_NAME, 0);
        String savestock =  mark.getString("stock", null);
        if (savestock != null) {
            stock = savestock.split("@", -1);
            tvstrength.setText(stock[0]);
            tvavailable.setText(stock[1]);
            tvbrand.setText(stock[2]);
            tvbatch.setText(stock[3]);
            tvexp.setText(stock[4]);
            tvstrength2.setText(stock[5]);
            tvavailable2.setText(stock[6]);
            tvbrand2.setText(stock[7]);
            tvbatch2.setText(stock[8]);
            tvexp2.setText(stock[9]);
            }

这就是保存SharedPreferences的方式:

SharedPreferences mark = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = mark.edit();
editor.putString("stock", inStrength + "@" + inamt + "@" + inBrand + "@" + inBatch + "@" + inExp + 
inStrength2 + "@" + inamt2 + "@" + inBrand2 + "@" + inBatch2 + "@" + inExp2);
editor.commit();

但是,我收到错误java.lang.ArrayIndexOutOfBoundsException: length=9; index=9。该错误是由tvexp2.setText(stock[9]);

引起的

我犯了什么错误?

2 个答案:

答案 0 :(得分:3)

虽然可以看到9个字符串但是根据你的分割表达式,你的数组中有8个字符串。可能你忘记在字符串 inExp **之后添加 @sysmbol 因为它可以看到** inExp + inStrength2 + 没有@符号。希望能帮到你

答案 1 :(得分:2)

您忘记在"@"之后和inExp之前添加一个inStrength2符号。在这里,我已经为你解决了这个问题:

SharedPreferences mark = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = mark.edit();
editor.putString("stock", inStrength + "@" + inamt + "@" + inBrand + "@" + inBatch + "@" + inExp + "@" + inStrength2 + "@" + inamt2 + "@" + inBrand2 + "@" + inBatch2 + "@" + inExp2);
editor.commit();