J'ai développé une application simple, comme la soustraction, l'addition . Dans cette application, j'utilise trois EditTexts, un pour la réponse et deux autres pour la question . Je veux calculer la réponse d'une question à un événement de changement de texte. Mais lorsque j'applique l'événement de modification de texte à la fois, l'événement se produit mais ne fonctionne pas correctement. Parce que quand j'entre dans le texte en premier EditText de la question l'événement se produit mais il lève cette exception:
07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event Java.lang.NumberFormatException: unable to parse '' as integer
Que dois-je faire? J'utilise la TextWatcher
pour l'événement de changement de texte.
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) {}
Je pense que vous recevez String " "
vide qui est à l'origine de ce problème. Assurez-vous d’obtenir une chaîne non vide de votre EditText
.
Considérez que votre EditText
n’a aucune valeur saisie, et que vous essayez d’obtenir sa valeur et de la convertir en int, vous allez rencontrer ce type de problème.
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) {
}
});
Consultez également ce lien pour plus d’idées,
je pense que le meilleur dans le cas où le type edittext est number ... utilisez la fonction (length) du paramètre. au lieu de (fonction equle ()) ex:
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) {
}
});
Je l'ai utilisé et c'est correct:
public void afterTextChanged(Editable arg0) {
String inputs = input.getText().toString();
Integer index=0;
if(!inputs.equals(""))
index=Integer.valueOf(inputs);
}
Je pense que vous devez vérifier que votre valeur editText est vide ou pas la première. Quelque chose comme ça:
String textValue;
textValue = edittext().getText().toString());
Log.v("","Value is " + textValue);
if(textValue != ""){
// Call Text Change Listener Here
}else{
// Throw error message or something
}
J'espère que c'est de l'aide.
J'ai eu le même problème et le problème a été résolu avec ces 2 actions:
1 - Android: inputType = "textNoSuggestions" (cela n'a pas résolu le problème lui-même)
2 - ajout de l'auditeur:
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) {
}
});
Ajouté Kotlin implementation pour référence future
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)
}
})