EditText to Int - PullRequest
       15

EditText to Int

2 голосов
/ 06 января 2012

Я новичок в разработке на Java и Android, поэтому я решил создать простое приложение, которое состоит из двух полей и помещает их в простое математическое уравнение. Однако мне нужно преобразовать EditText в Int, прежде чем я смогу с ними что-нибудь посчитать, верно? В файле XML я установил оба EditTexts для Android: inputType = "число". Мои попытки были такими:

  final EditText height = (EditText) findViewById (R.id.height);
  String heightString = height.getText().toString();
  final int heightInt = Integer.parseInt(heightString);

и

  final EditText height = (EditText) findViewById (R.id.height);
  final int heightInt = Integer.parseInt(height.getText().toString());

Я также пробовал Integer.valueOf в обоих случаях, но он всегда принудительно закрывает мое приложение, когда я запускаю его, и если я закомментирую, что int heightInt, оно не вызывает принудительное закрытие.

Вот весь код:

пакет com.body.calculator;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class bmi extends Activity {
     /** Called when the activity is first created. */



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final TextView results = (TextView) findViewById(R.id.results);
    final EditText height = (EditText) findViewById (R.id.height);
    String heightString = height.getText().toString();
    final int heightInt = Integer.parseInt(heightString);
    final EditText weight = (EditText) findViewById (R.id.weight);
    final Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    Button submit_bmi = (Button) findViewById(R.id.submit_bmi);
    submit_bmi.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            if (height.getText().toString().equals("") && weight.getText().toString().equals("")) {
                results.setText("Both fields are empty");
                vib.vibrate(100);
            }
            else if (height.getText().toString().equals("")) {
                results.setText("Height is empty");
                vib.vibrate(100);
            }
            else if (weight.getText().toString().equals("")) {
                results.setText("Weight is empty");
                vib.vibrate(100);
            }
            else {
            results.setText("");    
            }
        }


    });

}
}

Любая помощь будет оценена. Спасибо, Арнар.

Ответы [ 5 ]

5 голосов
/ 06 января 2012

Ваш подход к

  final EditText height = (EditText) findViewById (R.id.height);
  String heightString = height.getText().toString();
  final int heightInt = Integer.parseInt(heightString);

верен, но вы вызываете это непосредственно в вашем onCreate методе.Это означает, что их вызывают, как только приложение запускается, даже до того, как пользователь сможет что-либо сделать.из-за этого значения всегда пусты, просто потому, что у пользователя даже не было изменений, чтобы сделать что-либо еще.

Когда вы используете значения позже в вашем onClick (что правильно), онивсе еще пусто из-за их ранней инициализации.

Попробуйте поместить эту часть:

String heightString = height.getText().toString();
final int heightInt = Integer.parseInt(heightString);

Непосредственно после начала вашего onClick метода, но перед вашими if/else утверждениями, такими как:

public void onClick(View v) {
    String heightString = height.getText().toString();
    final int heightInt = Integer.parseInt(heightString);

           // Your statements

  }
0 голосов
/ 31 января 2012

я решил ту же проблему, поставить эти строки в блоке try и catch String heightString = height.getText (). ToString (); final int heightInt = Integer.parseInt (heightString);

запустить приложение, В эмуляторе не должно быть пробела после ввода числа

0 голосов
/ 06 января 2012

Переместить присвоение heightInt и weightInt в onClickListener`

0 голосов
/ 06 января 2012

Вы пытаетесь проанализировать содержимое в EditText в onCreate. Я предполагаю, что EditText в данный момент пуст, поэтому при синтаксическом анализе, как указано в javadoc , генерируется исключение NumberFormatException. Я предполагаю, что вы должны анализировать только содержимое EditText в методе onClick, когда пользователь отправляет.

Я не знаю, как работает EditText, но если пользователю разрешено вводить в EditText что-то отличное от целого числа, вы должны перехватить NumberFormatException, чтобы исключить возникновение исключения.

Обратите внимание, что ваши два фрагмента кода делают одно и то же. Первый просто хранит содержимое EditText в локальной переменной перед его анализом.

0 голосов
/ 06 января 2012

Может происходить много вещей (чтобы точно знать, что, вы можете посмотреть на вывод logcat, чтобы увидеть, генерируется ли исключение).Мои предположения, основанные на информации, которую вы дали:

  1. findViewById возвращает ноль, а затем вы пытаетесь использовать возвращаемое значение, вызывая NPE.

  2. Integer.parseInt создает исключение.Он делает это, когда не может разобрать строку в число.Вы должны проверить это с помощью try / catch.

...