Проблема при динамической реализации поля EditText

1

Я ввожу плавающие числа в поля EditText и хочу рассчитать результат на основе некоторой логики, как показано ниже, и отобразить результат в TextView. Мне было интересно узнать, в чем проблема с этим методом, так как я получаю ошибку с этим конкретным методом. Я знаю, что это просто, но тогда я новичок в Android.

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.bmi);
            bmi1=(EditText) findViewById(R.id.editText1);
            bmi2=(EditText) findViewById(R.id.editText2);
          bmi3=(TextView) findViewById(R.id.bmiText);


    bmi2.addTextChangedListener(new TextWatcher(){
        @Override
        public void afterTextChanged(Editable ab) {
            // TODO Auto-generated method stub

        }
          public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){
            calRes();
        }
    });




    ImageButton ImBtn=(ImageButton)findViewById(R.id.imageButton1);
    ImBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent newIntent=new Intent(Activity1.this,DragNDropListActivity.class);
            startActivity(newIntent);
            finish();
        }
    });

}

    public void calRes() {
        String a; 
         String b;  
        float c;
         a =  bmi1.getEditableText().toString();   //gets you the contents of edit text
         b =  bmi2.getEditableText().toString(); 
         c=  Float.parseFloat(a)/(Float.parseFloat(b)*Float.parseFloat(b));    
         bmi3.setText(String.valueOf(c));
    }

}

Ошибка:

     08-29 12:05:03.658: ERROR/AndroidRuntime(299): FATAL EXCEPTION: main
     08-29 12:05:03.658: ERROR/AndroidRuntime(299): java.lang.NumberFormatException:         lengte in metre
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at org.apache.harmony.luni.util.FloatingPointParser.initialParse(FloatingPointParser.java:130)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:319)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at java.lang.Float.parseFloat(Float.java:291)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at  com.android.mds.health.nursing.formula.Activity1.calRes(Activity1.java:87)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at com.android.mds.health.nursing.formula.Activity1$1.onTextChanged(Activity1.java:45)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.widget.TextView.handleTextChanged(TextView.java:6172)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6316)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:400)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:218)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:28)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:60)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:123)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:327)
     08-29 12:05:03.658: ERROR/AndroidRuntime(299):     at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:132)
  • 0
    вы можете дать трассировку журнала ошибок?
  • 0
    @user370305:I user370305: Я добавил журнал ошибок.
Показать ещё 2 комментария
Теги:
android-edittext

5 ответов

1
Лучший ответ

Вместо этого

bmi3.setText(String.valueOf(c));

сделай это

bmi3.setText(""+c);

РЕДАКТИРОВАТЬ:
Используйте valueOf вместо parseFloat

  c=  Float.valueOf(a)/(Float.valueOf(b)*Float.valueOf(b)); 

Редактировать 2: Вычислить ИМТ, когда все значения введены в edittexts. Имейте кнопку и вызвать calRes в onClick кнопки. Вы получаете исключение, потому что calRes вызывается, когда вы все еще входите в первое поле, а поля отдыха пусты. Пустые поля приводят к сбою, потому что в них нет значения для преобразования.

  • 0
    user7777777777: Даже тогда я не вижу изменений.
  • 0
    Я пробовал даже это, но тщетно :(
Показать ещё 10 комментариев
1

нормально, после просмотра вашего кода, похоже, у вас возникла проблема с обработкой строки для float,

Если у вас есть проблема с значениями строк a и b, тогда она должна работать нормально.

смотри, я пробовал эту работу,

       String a,b;
       Float c;
      tv =(TextView)findViewById(R.id.tv_test);
        a =  "100";   //gets you the contents of EditText
        b =  "10"; 
        c=  Float.parseFloat(a)/(Float.parseFloat(b)*Float.parseFloat(b));    
      tv.setText(String.valueOf(c));


Edit: Also take care of your editText input its have only numeric values in string
format, not any characters or special symbols.
0

от взгляда на вашу первоначальную ошибку кажется, что вы пытаетесь разобрать поплавок из строки "lengte in meter". Это текст ярлыка в вашем макете? Конечно, это не синтаксический код :) Возможно, если у вас все еще есть проблемы, вы можете опубликовать файл макета xml.

Энтони

  • 0
    Я получил решение для этого. В любом случае спасибо :) У меня есть небольшое сомнение. Как динамически установить десятичное значение до двух значений (то есть #. ##) в моем поле EditText?
  • 0
    Добавьте textChangedListener в ваш EditText и проверьте, сколько десятичных разрядов было добавлено. Если они уже 2, не принимайте больше ввода. Я не знаю простого метода маски, который вы можете использовать.
Показать ещё 1 комментарий
0

Если какой-либо алфавит или специальные символы в вашем EditText (bmi1 & bmi2, a, b), то эта ошибка должна появиться, поэтому проверьте значение EditText, используя System.out.println..becuase float. Variablt должен быть числовым и точным (.)

0

Возможно, вместо этого,

    a =  bmi1.getText().toString();   //gets you the contents of EditText
    b =  bmi2.getText().toString(); 

вы должны попробовать это,

    a =  bmi1.getEditableText().toString();   //gets you the contents of EditText
    b =  bmi2.getEditableText().toString(); 
  • 0
    : Я не вижу изменений даже после того, как сделать это как EditableText ().
  • 0
    Я отредактировал свой код для всего класса. Пожалуйста, посмотрите.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню