我有一些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]);
我犯了什么错误?
答案 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();