2

私はアンドロイドアプリケーションを作成しており、私はPreferenceActivityを使用しようとしています。ここでClassCastExceptionが発生するのはなぜですか?

私はjava.lang.ClassCastExceptionが取得しています:それは、このラインにreturn PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF);

を取得したときに、私はそれの文字列からそれを正しく変換していないよので、私はそれがかもしれないと思ったjava.lang.Stringでエラーを私が必要とするintへのEditTextボックスの値が、私はこれを解決する方法を見つけることができない、またはそれも原因ですか?私はうんざりしている。

ここに私の好みのアクティビティクラスです:

public class UserPrefs extends PreferenceActivity { 
//option names and default vals 
private static final String USER_TERM = "term_length"; 
private static final String USER_YEAR = "year_length"; 
private static final int USER_TERM_DEF = 12; 
private static final int USER_YEAR_DEF = 34; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
} 

public static int getTermLength(Context context){ 
    try{ 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF); 
    }catch (ClassCastException e){Log.v("getTermLength", "error::: " + e); } 
    //return 1;//temporary, needed to catch the error and couldn't without adding a return outside the block.// 
} 
public static int getYearLength(Context context){ 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_YEAR, USER_YEAR_DEF); 
} 

そして、ここでは、私は別のクラスの内部リファレンスを使用しようとしているコードのビットです:

public float alterForFrequency(Context keypadContext, float enteredAmount, String spinnerPosition){ 

    int termLength = UserPrefs.getTermLength(keypadContext); 
    int yearLength = UserPrefs.getYearLength(keypadContext); 
} 

完全アンドロイドlogcat、私はここにアップロードされました:http://freetexthost.com/v3t4ta3wbi

+0

完全なスタックトレースを投稿できますか? 'PreferenceManager.getDefaultSharedPreferences(context)'の戻り時間は何秒ですか? 'getInt()'メソッドのシグニチャとは何ですか? – PaoloVictor

+0

@ Hunter2、Damn。申し訳ありませんが、私はプログラミングに慣れていないし、恥ずかしいことに、これらの質問に答えることはできません。しかし、私はアンドロイドlogcatの内容を投稿することができます(もし私が持っている)、それが役立つ場合は、あなたが私にそれを行う日食でstacktraceを取得する方法を教えてくれるほど親切であれば。とにかくありがとう。 – Holly

+0

@ Hunter2は、 'ClassCastException'のスタックトレースを意味しています。 try/catchを削除してlogcatを投稿することができます。とにかく 'getInt(String、int)'なので、正しいはずです。 – bigstones

答えて

9

あなたはStringとして保存されており、としてそれを読もうとしています。、したがってClassCastException

設定を文字列として保存しておきたい場合は、getStringを使用してInteger.parseInt()にその値を渡して、intを得ることができます。

それ以外の場合は、値が環境設定としてintに書き込まれるようにする必要があります。

+0

もちろんありがとう! – Holly

関連する問題