2017-06-19 117 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 –