2017-06-19 20 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

私はそれがアンドロイドスタジオ(または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がスローいますStringではありません。

getString()の代わりにgetLong()を使用する必要があるようです。

+0

しかし、BigIntegerコンストラクタにはString型の値が必要ですが、長い値ではありません –

+0

Javaのルールに違反して取得するつもりはありません。 'BigInteger'のドキュメントを読んだことはありますか?何故なの? http://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#valueOf-long- –

+0

しかし、私はこの値をStringとして保存しないので、getLong()はできません私はStringを持っています –

関連する問題