2013-09-18 4 views
0

Я должен принять значение EditText и разделить его на 1,21 .... где есть ошибкаAndroid TextWatcher afterTextChanged

private TextWatcher filterTextWatcher = new TextWatcher() { 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

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


     } 
    public void afterTextChanged(Editable s) { 

     double imponibile21; 
     Importo.getText().toString(); 
     if (spinnerIva.getSelectedItem().toString().equals("21%")){ 

     Double value = Double.valueOf(""+Importo); 
     imponibile21 = (value/1.21); 

     NumberFormat formatter = NumberFormat.getCurrencyInstance(); 
     String Imponibile = formatter.format(imponibile21); 
     mImponibile.setText(Imponibile); 

Ошибка:

09-18 22:59:56.617: E/AndroidRuntime(27425): java.lang.NumberFormatException: Invalid double: "android.widget.EditText{421f9c38 VFED..CL .F...... 0,664-1080,781 #7f08000b app:id/ed_importo_fattura}" 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.StringToReal.initialParse(StringToReal.java:114) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.StringToReal.parseDouble(StringToReal.java:263) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.Double.parseDouble(Double.java:295) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.Double.valueOf(Double.java:332) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at fatture.acquisti.Inserisci_fatture$2.afterTextChanged(Inserisci_fatture.java:178) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.widget.TextView.sendAfterTextChanged(TextView.java:7841) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:9754) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:970) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:497) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:676) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:196) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.os.Looper.loop(Looper.java:137) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at android.app.ActivityThread.main(ActivityThread.java:5328) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.reflect.Method.invokeNative(Native Method) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at java.lang.reflect.Method.invoke(Method.java:511) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
09-18 22:59:56.617: E/AndroidRuntime(27425): at dalvik.system.NativeStart.main(Native Method) 
+0

С чем вы столкнулись? –

+0

Я включил ошибку –

ответ

1

Ваш переход от String к Double не работает правильно, следовательно, ошибка java.lang.StringToReal.invalidReal(StringToReal.java:63). Эта ошибка возникает в строке 63 вашего кода (java: 63).

Попробуйте это:

String stringValue = Importo.getText().toString(); 
if(!stringValue.isEmpty()) { 
    Double value = Double.valueOf(stringValue); 
} 
+0

, она работает, но если я пишу в EditText, а затем удаляю приложение, сбой! это ошибка: NumberFormatException: Invalid double: "" –

+0

Вам нужно будет выполнить некоторую проверку ошибок, чтобы убедиться, что 'String' не пуст. Простая проверка 'if' должна делать трюк. Он пытается преобразовать «» в «Двойной», который не работает. – BC2

+0

Извините, чек (если), как я это делаю в textwatcher? пример? спасибо –

0

Похоже, что вы пытаетесь разобрать EditText к Double вместо String, содержащего значение.

попробовать что-то вроде этого:

public void afterTextChanged(Editable s) { 

    double imponibile21; 
    String val = s.toString(); 
    if (spinnerIva.getSelectedItem().toString().equals("21%")){ 

     Double value = Double.valueOf(val); 

Убедитесь, что val содержит действительный double.

+0

это работает, но если я пишу в EditText, а затем удаляю приложение сбой! это ошибка: NumberFormatException: Invalid double –

+0

Это потому, что удаление текста из триггеров 'EditText'' afterTextChanged() '. Вы можете добавить 'if (val.length()> 0)' – SimonSays

+0

ok разрешено, спасибо –

0

String number = Importo.getText().toString(); Double value = Double.valueOf(""+ number);

Это то, что вам нужно

0

добавить implements TextWatcher к классу. эта проблема решена. я импортировал TextWatcher, но он не работал, и я попытался реализовать его, и он отлично работает.

+0

, хотя это может ответить на вопрос, вы должны попытаться улучшить его с объяснением и соответствующим кодом. см. [Как написать хороший ответ?] (http://stackoverflow.com/help/how-to-answer) – SMR

Смежные вопросы