2

我正在創建一個android應用程序,我試圖使用PreferenceActivity。爲什麼我在這裏得到一個ClassCastException?

,我發現了java.lang.ClassCastException:java.lang.String中錯誤當它到達此行return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF);

我想這可能是因爲我沒有正確地將它從它的串值在EditText框中的int我需要但我無法弄清楚如何解決這個問題,或者甚至是原因?我迷失了方向。

我更喜歡這個活動類:

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); 
} 

完整的Android logcat的,我've uploaded here:http://freetexthost.com/v3t4ta3wbi

+0

你能發佈完整的堆棧跟蹤嗎? 'PreferenceManager.getDefaultSharedPreferences(context)'的返回時間是多少?什麼是getInt()方法的簽名? – PaoloVictor

+0

@ Hunter2,該死的。抱歉,我是編程新手,無法回答以下任何問題:/。但是如果有幫助,我可以發佈androids logcat的內容(如果有幫助的話),並且如果你願意告訴我如何在eclipse中獲得堆棧跟蹤,我也會這樣做。不管怎麼說,還是要謝謝你。 – Holly

+0

我確定@ Hunter2意味着'ClassCastException'的棧跟蹤。你可以刪除try/catch,然後發佈logcat。無論如何它是'getInt(String,int)',所以這應該是正確的。 – bigstones

回答

9

您的首選項存儲爲String,並且您試圖將其作爲讀取,因此ClassCastException

如果您很高興將首選項保存爲字符串,則可以使用getString並將該值傳遞給Integer.parseInt()以獲得int

否則,您需要確保將值作爲int寫入到首選項中。

+0

當然謝謝你! – Holly

相關問題