ParseInt Exception - PullRequest
       0

ParseInt Exception

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

Я создаю небольшое приложение calc с представлениями EditText, и я запускаю исключение времени выполнения, когда пользователь оставляет пустое представление EditText, в результате чего ParseInt пытается и ничего не анализирует.Я читал, что мне нужно «попробовать» и «поймать» эту ошибку, прежде чем она возникнет, но я не уверен, где и как это сделать!

Любой совет очень ценится!

Вотмой код:

public class HandlerExamples extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button)findViewById(R.id.testButton);
        button.setOnClickListener(this);

public void onClick(View v) {
            String a,b,t;
            double vis;

            EditText txtbox1 = (EditText)findViewById(R.id.A);
                EditText txtbox2 = (EditText)findViewById(R.id.B);
                EditText txtbox3 = (EditText)findViewById(R.id.t);
                TextView tv = (TextView) findViewById(R.id.Answer);

            a = txtbox1.getText().toString();
            b = txtbox2.getText().toString();
            t = txtbox3.getText().toString();

            vis = ((Integer.parseInt(a)*1) + (Integer.parseInt(b)*2)) / (Double.parseDouble(t));
            tv.setText(double.toString(vis));       
    }
}

Большое спасибо!

Ответы [ 3 ]

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

Чангвей Яо определил один способ, которым вы можете сделать это, но вот так, как это делают большинство программистов на Android (программно), так как немного легче читать и выяснять, что делают ваши виджеты:

НоВо-первых, удалите implements OnClickListener из своей Деятельности, так как в этом нет необходимости.

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // what you want your button to do when clicked
    }
}
editText.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // what you want your EditText to do when clicked
        // (such as editText.setText(""))
    }
}

Другой способ сделать то же самое - определить android:onClick="insert_method_name_here" для виджетов, которые вы хотите выполнять при щелчке.В вашем случае, в вашем main.xml (поскольку это то, что вы используете в своей деятельности), вы можете написать что-то вроде ...

<Button android:id="@+id/testButton"
    (other attributes you wish to apply to the button)
    android:onClick="buttonAction" />
<EditText
    (other attributes)
    android:onClick="textAction" />

И затем в своей деятельности вы определяете методыbuttonAction(View v) и textAction(View v).Обратите внимание, что эти методы должны быть public void и принимать единственный аргумент View v.

(Одним из преимуществ метода XML является то, что вам необязательно определять атрибут android:id для этихвиджеты, если вам не нужно иметь возможность манипулировать ими или извлекать из них информацию в своем коде (что означает, что вам нужно будет определить android:id для вашего EditText, так как вам, вероятно, понадобится ввод данных пользователем))

0 голосов
/ 24 марта 2012

Если вам нужно только исключить пустое текстовое поле, то решение hotveryspicy, вероятно, самое быстрое. Для безопасного решения: перехват NumberFormatException отфильтрует все, что не может быть преобразовано в целое число.

int vis;
try {
    vis = Integer.parseInt(a);
}
catch(NumberFormatException nfe) {
    Log.e(TAG,"trying to convert:"+a+" to integer failed");
    vis = 0;
}
0 голосов
/ 07 августа 2011
public void onClick(View v) {
    int id = v.getId();
    switch(id){
    case R.id.xx:
        //do things xx click
        break;
    case R.id.yy:
        //do things yy click
        break;
    }
}

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

...