Я ввожу плавающие числа в поля 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)
Вместо этого
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 вызывается, когда вы все еще входите в первое поле, а поля отдыха пусты. Пустые поля приводят к сбою, потому что в них нет значения для преобразования.
нормально, после просмотра вашего кода, похоже, у вас возникла проблема с обработкой строки для 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.
от взгляда на вашу первоначальную ошибку кажется, что вы пытаетесь разобрать поплавок из строки "lengte in meter". Это текст ярлыка в вашем макете? Конечно, это не синтаксический код :) Возможно, если у вас все еще есть проблемы, вы можете опубликовать файл макета xml.
Энтони
Если какой-либо алфавит или специальные символы в вашем EditText
(bmi1 & bmi2, a, b), то эта ошибка должна появиться, поэтому проверьте значение EditText, используя System.out.println
..becuase float. Variablt должен быть числовым и точным (.)
Возможно, вместо этого,
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();