parseInt аварийное приложение для Android - PullRequest
3 голосов
/ 19 сентября 2011

Итак, я пытаюсь создать приложение для калькулятора (просто чтобы освоить разработку под Android), и во время некоторых испытаний я заметил, что преобразование parseInt из «String tack1» вызывает сбой приложения. Может кто-нибудь сказать мне, почему? Я не могу понять это, и я уже давно ищу в Интернете. (хе-хе, я новичок, поэтому, пожалуйста, будьте полегче). В приведенном ниже коде я изменил пару строк, чтобы было очевидно, что именно он должен печатать, но все равно происходит сбой. Вот код:


equals.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            oC = 1; //operator checker is on 1 (for plus)
            switch(oC){ //check for operator clicked
                case 0: break;
                case 1:
                   tack1 = "1"; //INSERTED THIS TO MAKE OUTPUT OBVIOUS
                   tack1 = tack1.trim(); tack2 = tack2.trim(); //INSERTED BEFORE TO DEAL WITH WHITESPACE
                   numOne = Integer.parseInt(tack1); //CRASHES HERE
                   answer.setText(numOne);
                   modeChecker = 0; oC = 0;break;

ЗАМЕЧАНИЯ ПО ПРОГРАММЕ (некоторые комментарии повторяются и другие вещи):

Тэкс1 = "1"; сделать вывод очевидным

tack1.trim () предназначен для работы с пробелами

Да, все, что находится в поле, - это число и целое число (даже не отрицательное целое)

Да, numOne является целым числом и определено выше (не в указанном здесь коде)

Извините, что отступы все перепутаны (после случая 1) из-за комментариев, которые я добавил

Это раздел моего метода onClick, поэтому закрывающие скобки здесь не включены.

Может кто-нибудь помочь мне? СПАСИБО: D

1 Ответ

4 голосов
/ 19 сентября 2011

Я хотел бы поспорить, что на самом деле происходит сбой на следующей строке ПОСЛЕ вызова parseInt.

Вы звоните setText(int) в вашем TextView. Когда вы передаете int этому методу, это int - указатель на строковый ресурс ... вы, вероятно, ожидаете автоматического преобразования в строку. Поскольку вы передаете ему int, сгенерированное в вашем приложении, крайне маловероятно, что этот int также указывает на строковый ресурс в вашем файле res / values ​​/ strings.xml. Что вы действительно хотите сделать, так это сначала изменить numOne на строку, которую вы можете сделать встроенным:

Изменение

answer.setText(numOne);

до

answer.setText(String.valueOf(numOne));

и ты в порядке.

...