【问题标题】:unable to parse "" as integer[FC]无法将“”解析为整数 [FC]
【发布时间】:2011-08-12 21:07:12
【问题描述】:

我有这段代码来控制 EditTextPreference 是否为空:

    case R.id.prochain_vidange:
                settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                String choix_huile = settings.getString("listPref_huile_moteur", "0");
                km = settings.getString("km", "");
                Log.d("TAG",km);
               int x= Integer.valueOf(km);
               if (km != "")
{
               if (Integer.valueOf(choix_huile) == 0) {
    ............

问题出在这一行:

int x= Integer.valueOf(km);

可能是什么问题? 谢谢。

【问题讨论】:

    标签: android string integer


    【解决方案1】:

    如果你给Integer.valueOf(String s) 一个不是有效数字的字符串,它会抛出一个NumberFormatException。将默认值更改为 0:

    km = settings.getString("km", "0");
    

    或者,您可以捕获异常,并将x 设置为0

    km = settings.getString("km", "");
    int x;
    try {
        x = Integer.valueOf(km);
    } catch(NumberFormatException e) {
        x = 0;
    }
    

    【讨论】:

    • 是的,好点,但是他可以首先将值保存为整数。
    • @Michele - 这是一个很好的观点,通常我打算让代码尽可能接近原始代码,但在这种情况下你可能是对的。
    【解决方案2】:

    Integer.valueOf 尝试使用 .parseInteger(String s) 创建一个新 Integer,"" 无法解析为有效数字,因此您会收到 NumberFormatException

    你可以用 try catch 块来捕捉它,或者你可以不尝试用字符串 "" 来创建一个整数。

    之前:

    int x= Integer.valueOf(km);
    if (km != "") {
    

    之后:

    if (km != "") {
    int x= Integer.valueOf(km);
    

    【讨论】:

      【解决方案3】:

      如果km 字符串无法解析为整数,Integer.valueOf(km) 会抛出异常。

      但是,我不推荐将其包装在 try { } catch() 块中。

      SharedPreferences 中为getString() 方法设置默认值的全部目的是,如果首选项不存在,则可以使用默认值。因此,解决此问题的更好方法是将您的 settings.getString(...) 调用修改为:

       km = settings.getString("km", "0");
      

      那么您对Integer.valueOf(km) 的后续调用将不会出现空白。

      输入字符串是否来自用户可以输入任何值的空白文本字段?如果是这样,那么您就可以验证用户输入的值。通过尽早验证输入,您无需将检查/验证机制分散到代码的其他区域。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 2014-01-20
        • 2019-08-21
        • 1970-01-01
        相关资源
        最近更新 更多