2012-12-10 113 views
0

在我的Android应用程序,我使用了一个名为“IntEditTextPreference”类。当我希望用户将首选项作为整数引入时,将使用此类。NumberFormatException异常与IntEditTextPreference

但它有一个问题。当用户将该字段留空并按下“ok”时,会引发NumberFormatException。

什么我可以做,以避免用户按“OK”时,该字段为空?

谢谢!

public class IntEditTextPreference extends EditTextPreference 
{ 

    public IntEditTextPreference(Context context) 
    { 
      super(context); 
    } 

    public IntEditTextPreference(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    public IntEditTextPreference(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected String getPersistedString(String defaultReturnValue) 
    { 
     return String.valueOf(getPersistedInt(-1)); 
    } 

    @Override 
    protected boolean persistString(String value) 
    { 
     return persistInt(Integer.valueOf(value)); 
    } 

}

+0

使用默认值 – CocoNess

+0

哪里是persistInt方法? –

回答

0

你可能应该还有一个try/catch块来捕捉NumberFormatException。但是有很多方法可以做到这一点。一种方法是,您可以使用setClickable方法的按钮到false,然后在文本不为空时为true,并且使用onTextChangedListener为整数。或者,您可以简单地让它成为可点击的,但在点击按钮时检查空字符串或非整数,并在允许按钮执行任何操作之前使用警告消息toast/alert/label让用户知道他们有不正确的字段。希望这可以帮助!

+0

谢谢!我已经完成了。在EditTextPreference的构造函数中,我创建了一个EditTextWatcher并将其关联到首选项getEditText()。addTextChangedListener(watcher)''的EditText。然后,在观察者内部,我检查该字段是否为空,并根据它来禁用o启用按钮。 – Eduardo

+0

不客气,我很高兴你的工作。如果您接受答案,对于有同样问题的其他人找到答案会更容易 – codeMagic

0

一般来说,如果您使用的是基于浏览器的应用程序,你可以使用JavaScript的/AJAX当输入有效显示一个按钮。这已经在客户端处理了。 为了避免NumberFormatException,只需添加一个try - 围绕Integer.valueOf(value)声明catch - 块。

基本上,它取决于你的客户端框架。可能有更好的框架特定解决方案。你使用哪一个?

+0

我正在使用android – Eduardo

+0

Doh ...这将解释Android标记。 Sry目前深入基于Web的开发人员,并没有意识到可能有不同。 – Wintermute

相关问题