Проблема при динамической реализации поля EditText - PullRequest
1 голос
/ 29 августа 2011

Я ввожу плавающие числа в мои поля 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)

Ответы [ 5 ]

1 голос
/ 29 августа 2011

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

Если у вас нет проблем со значениями строк 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.
1 голос
/ 29 августа 2011

Вместо этого

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 голосов
/ 29 августа 2011

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

Anthony

0 голосов
/ 29 августа 2011

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

0 голосов
/ 29 августа 2011

Может, вместо этого,

    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(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...