2012-02-22 96 views
1

我正在使用磁盘空间计算器,我需要根据用户输入动态计算一些值。我的应用程序中有一个EditText元素接收数字。我想调用函数calculate(),当用户在文本字段中输入一个值时,它将自动计算其他值。这里是我的代码,它当EditText为空时,用于动态计算的Android崩溃

//fps is my EditText element 
this.fps.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
      { 
    // TODO Auto-generated method stub 
     calculate(); 
    } 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
    // TODO Auto-generated method stub 
    } 
    @Override 
    public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 

    } 
    });  

我的计算()函数使用文本输入,将其转换成浮点计算像其他带宽值。它工作正常,但问题出现时,我想删除EditText中的所有数字添加另一个。在editText中没有任何内容的时候,它会发出异常。我的理解,这是因为没有什么可以转化为浮动这样解析异常等 我试图把一个默认值

if(fps.getText().length==0) 
    fps.setText("1"); 

但它不工作。我怎么解决这个问题?

回答

3

只是试图环绕你calculate()用try/catch块,赶上抛出的异常..

try { 
    calculate(); 
} catch {NumberFormatException nfe) { //or whatever exception you get 
     //do some handling if you need to 
} 
1

试试这个:

this.fps.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 

    } 
    @Override 
    public void afterTextChanged(Editable s) { 

     if(!s.toString().trim().equals("")) 
      calculate(); 
     else 
      //do nothing here or show error 
    } 
}); 
+0

非常感谢我的解决方案,我尝试了它,它的工作原理+1,但因为我不能接受多个答案,我想我会使用try catch块解决方案。 – Anila 2012-02-22 13:38:50

1

您的操作尝试当你的edittext中至少有一个字符是这样的时,在onTextChanged()中调用你的calculate()。

if(fps.getText.length>0){ 
calculate(); 
} 
+0

感谢您的回答 – Anila 2012-02-22 13:44:56