我创建了一个保存和加载BigInteger和String变量的程序。当我已经开始计划充分显示了异常:Java long不能转换为字符串
java.lang.ClassCastException:java.lang.Long中不能转换为java.lang.String
它说,它发生在这里:
robotPrices[0] = new BigInteger(sharedPreferences.getString("rbt1price", "100"));
我的节能方法:
public void save() {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("rbt1price", robotPrices[0].toString());
editor.putString("rbt2price", robotPrices[1].toString());
editor.putString("rbt3price", robotPrices[2].toString());
editor.putString("rbt4price", robotPrices[3].toString());
editor.putString("rbt5price", robotPrices[4].toString());
editor.putString("rbt1qu", robotQu[0].toString());
editor.putString("rbt2qu", robotQu[1].toString());
editor.putString("rbt3qu", robotQu[2].toString());
editor.putString("rbt4qu", robotQu[3].toString());
editor.putString("rbt5qu", robotQu[4].toString());
editor.putLong("lvl", lvl);
editor.apply();
}
我的加载方法:
private void load() {
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this);
lvl = sharedPreferences.getLong("lvl", 1);
robotPrices[0] = new BigInteger(sharedPreferences.getString("rbt1price", "100"));
robotPrices[1] = new BigInteger(sharedPreferences.getString("rbt2price", "1100"));
robotPrices[2] = new BigInteger(sharedPreferences.getString("rbt3price", "12000"));
robotPrices[3] = new BigInteger(sharedPreferences.getString("rbt4price", "130000"));
robotPrices[4] = new BigInteger(sharedPreferences.getString("rbt5price", "1400000"));
robotQu[0] = new BigInteger(sharedPreferences.getString("rbt1qu", "0"));
robotQu[1] = new BigInteger(sharedPreferences.getString("rbt2qu", "0"));
robotQu[2] = new BigInteger(sharedPreferences.getString("rbt3qu", "0"));
robotQu[3] = new BigInteger(sharedPreferences.getString("rbt4qu", "0"));
robotQu[4] = new BigInteger(sharedPreferences.getString("rbt5qu", "0"));
}
编辑: 这并不工作过:
robotPrices[0] = new BigInteger(sharedPreferences.getLong("rbt1price", 100));
但是我需要BigInteger构造函数的字符串值,而不是一个很长的值 –
您不会违反Java的规则来获取它。你有没有考虑阅读'BigInteger'文档?为什么不? http://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#valueOf-long- –
但我把这个值保存为字符串没有这么长,所以我不能getLong()在哪里我有String –