我开发了一个简单的应用,例如减法,加法。在此应用程序中,我使用三个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
我该怎么办?我将TextWatcher
用于文本更改事件。
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) {}
我认为您收到的空字符串" "
引起了此问题。确保从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) {
}
});
也请查看此链接以获取更多想法,
我认为最好的情况是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) {
}
});
我使用了它,这是正确的:
public void afterTextChanged(Editable arg0) {
String inputs = input.getText().toString();
Integer index=0;
if(!inputs.equals(""))
index=Integer.valueOf(inputs);
}
我认为您需要先检查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
}
希望有帮助。
已添加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)
}
})
我有相同的问题,并且通过以下两个操作解决了该问题: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) {
}
});
对于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) {}
})