繁体   English   中英

为什么我在这里得到ClassCastException?

[英]Why am I getting a ClassCastException here?

我正在创建一个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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM