2017-06-19 158 views
-2

我创建了一个保存和加载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)); 

回答

1

好吧,我发现它是在android工作室(或java编译器)中的一种错误。我只需要添加
String rp0 = sharedPreferences.getString("rbt1price", "100");
和一切正常。所以,我没有像有人告诉我的那样“违反了java的规则”。 感谢您的回答!

2

https://developer.android.com/reference/android/content/SharedPreferences.html#getString(java.lang.String, java.lang.String)

抛出ClassCastException - 如果没有这个名称的首选项不是一个字符串。

看来您应该使用getLong()而不是getString()。

+0

但是我需要BigInteger构造函数的字符串值,而不是一个很长的值 –

+0

您不会违反Java的规则来获取它。你有没有考虑阅读'BigInteger'文档?为什么不? http://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#valueOf-long- –

+0

但我把这个值保存为字符串没有这么长,所以我不能getLong()在哪里我有String –