29

我开发了一个简单的应用程序,比如减法、加法。在这个应用程序中,我使用了三个 EditText,一个用于回答,另外两个用于提问。我想计算关于文本更改事件的问题的答案。但是,当我在这两个上应用文本更改事件时,事件会发生但无法正常工作。因为当我在问题的第一个 EditText 中输入文本时,事件发生但它抛出了这个异常:

07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event java.lang.NumberFormatException: unable to parse '' as integer

我该怎么办?我使用TextWatcherfor text change 事件。

txtOne.addTextChangedListener(this);
txtTwo.addTextChangedListener(this);

public void afterTextChanged(Editable s) {}

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

public void onTextChanged(CharSequence s, int start, int before, int count) {}  
4

7 回答 7

51

我认为您收到" "的是导致此问题的空字符串。确保从EditText.

考虑你EditText没有输入任何值,并且你试图获取它的值并转换为 int 你会遇到这种问题。

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
            if(!s.equals("") ) { 
                //do your work here 
            }
    }



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

    }

    public void afterTextChanged(Editable s) {

    }
});

另请查看此链接以获取更多想法,

https://stackoverflow.com/a/3377648/603744

于 2012-07-03T11:13:32.397 回答
2

我认为最好的情况是edittext类型是数字......使用参数的(长度函数)而不是(equle()函数)例如:

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if (s.length() > 0)
                { //do your work here }
        }

    }

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

    }

    public void afterTextChanged(Editable s) {

    }
});
于 2016-12-29T12:01:25.753 回答
1

我用了这个,它是正确的:

public void afterTextChanged(Editable arg0) {
    String inputs = input.getText().toString();
    Integer index=0;
    if(!inputs.equals("")) 
        index=Integer.valueOf(inputs);

}
于 2013-01-20T13:55:24.450 回答
0

我认为您需要先检查您的 editText 值是否为空。像这样的东西:

String textValue;
textValue = edittext().getText().toString());
Log.v("","Value is " + textValue);
if(textValue != ""){
   // Call Text Change Listener Here
}else{
   // Throw error message or something
}

希望有帮助。

于 2012-07-03T12:01:42.870 回答
0

添加了Kotlin实现以供将来参考

 webUrl.editText!!.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

                var urlToload: String
                if (s ==null || s.isEmpty()) {
                    urlToload = UniversalWebViewFragment.YOUTUBE_SERACH_URL + "hd trailers"
                } else {
                    urlToload = UniversalWebViewFragment.GOOGLE_SERACH_URL + s.toString()
                }

                loadURL(urlToload)
            }

        })
于 2019-01-31T15:45:27.247 回答
0

我遇到了同样的问题,通过以下 2 个操作解决了问题:
1 - android:inputType="textNoSuggestions" (它本身并没有解决问题)
2 - 添加监听器:

edittext1.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before,
            int count) {

                Log.e("JFT", "EDITTEXT => = "+s);
                if(!s.equals("") ) {
                    //do your work here
                }
            }



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

            }

            public void afterTextChanged(Editable s) {

            }
        });
于 2019-02-13T05:50:36.110 回答
0

对于 Kotlin,请使用以下代码

edit1.addTextChangedListener(object : TextWatcher {
   override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
       if (edit1.text.toString().length == 1) {
             edit2.requestFocus()
       }
   }

   override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int
   ) {// TODO Auto-generated method stub
   }

   override fun afterTextChanged(s: Editable) {}
})
于 2020-01-09T11:24:50.690 回答