我有这段代码来控制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);
可能是什么问题? 感谢。
答案 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)
的后续调用将不会有空白失败。
输入字符串是否来自空白文本字段,用户可以在其中输入任何值?如果是这样,那么您可以验证用户输入的值。通过尽早验证输入,您无需将检查/验证机制分散到代码的其他区域。