无法解析整数[FC]

时间:2011-08-12 21:07:13

标签: android string integer

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

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

可能是什么问题? 感谢。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

您可以使用try catch块捕获它,或者您可以简单地尝试使用String“”创建一个Integer。

之前:

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

后:

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

答案 2 :(得分:1)

如果Integer.valueOf(km)字符串无法解析为整数,则

km会抛出异常。

但是,将它包装在try { } catch()块中并不是我建议的方法。

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

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

然后您对Integer.valueOf(km)的后续调用将不会有空白失败。

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