2

我正在创建一个 android 应用程序,并且正在尝试使用 PreferenceActivity。

当它到达这一行时,我收到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,我在这里上传:http: //freetexthost.com/v3t4ta3wbi

4

1 回答 1

9

您有一个存储为 a 的首选项,String并且您试图将其作为 读取int,因此ClassCastException.

如果您愿意将首选项存储为字符串,则可以使用getString并将该值传递Integer.parseInt()int.

否则,您需要确保将值作为 int 写入首选项。

于 2011-01-29T15:20:20.187 回答