我开发了一个简单的应用程序,如减法,添加。 在这个应用程序中,我使用三个EditTexts,一个用于回答,另外两个用于提问。 我想计算文本更改事件的问题答案。但是当我对这两个应用文本更改事件时,事件发生但不正常工作。因为当我在问题的第一个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) {}
答案 0 :(得分:43)
我认为您收到空字符串" "
,这会导致此问题。确保从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) {
}
});
另请查看此链接以获取更多信息,
答案 1 :(得分:2)
我认为编辑文本类型为数字时最好...使用参数的(长度函数) 而不是(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) {
}
});
答案 2 :(得分:1)
我用过这个,这是正确的:
public void afterTextChanged(Editable arg0) {
String inputs = input.getText().toString();
Integer index=0;
if(!inputs.equals(""))
index=Integer.valueOf(inputs);
}
答案 3 :(得分: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
}
希望它有所帮助。
答案 4 :(得分: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)
}
})
答案 5 :(得分:0)
我遇到了同样的问题,并通过以下两个操作解决了问题:
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) {
}
});
答案 6 :(得分: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) {}
})