Приложение Android падает на линии 54 (Integer.parseInt) и не совсем уверен, почему - PullRequest
0 голосов
/ 27 февраля 2012

Я отлаживал свое приложение с моим телефоном, и все ошибки logcat, которые я получаю, относятся к строке 54 в моей деятельности, где я анализирую String в Int. Основная идея приложения - конвертер пенни, в котором пользователь вводит количество копеек, которое он хочет конвертировать, и делится от четвертей до оставшихся копеек. На данный момент я не уверен, правильно ли я перехватил событие и перешел к использованию анонимного внутреннего класса и просто реализую его в этом классе.

Вот код для Java-приложения:

public class PennyConverterActivity extends Activity
{

    EditText et;
    TextView tv;

    int cents;
    int remaining;
    int quarters;
    int dimes;
    int nickels;
    int pennies;
    String result;

    @Override

    public void onCreate(Bundle b)
    {
        super.onCreate(b);
        setContentView(R.layout.main);

        et = (EditText) findViewById(R.id.penny);

        et.setText(result);

        et.setOnKeyListener(new View.OnKeyListener() 
        {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) 
            {
                if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
                {
                    result = et.getText().toString();
                    return (true);
                }

                return (true);
            }
        }); 


        cents = Integer.parseInt(result); //LogCat error refers to this line

        tv = (TextView) findViewById(R.id.quarters);

        quarters = cents / 25;
        tv.setText(R.string.quarters);
        remaining = cents % 25;

        tv = (TextView) findViewById(R.id.dimes);

        dimes = remaining / 10;
        tv.setText(R.string.dimes);
        remaining = remaining % 10;

        tv = (TextView) findViewById(R.id.nickels);

        nickels = remaining / 5;
        tv.setText(R.string.nickles);

        tv = (TextView) findViewById(R.id.pennies);

        pennies = remaining % 5;
        tv.setText(R.string.pennies);

    }

}

и мои ошибки Logcat

02-26 15:26:30.602: E/AndroidRuntime(25020): FATAL EXCEPTION: main
02-26 15:26:30.602: E/AndroidRuntime(25020): java.lang.RuntimeException: Unable to start activity ComponentInfo{CS211D.HW03.PennyConverter/CS211D.HW03.PennyConverter.PennyConverterActivity}: java.lang.NumberFormatException: unable to parse 'null' as integer
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.os.Looper.loop(Looper.java:130)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.ActivityThread.main(ActivityThread.java:3683)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at java.lang.reflect.Method.invokeNative(Native Method)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at java.lang.reflect.Method.invoke(Method.java:507)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at dalvik.system.NativeStart.main(Native Method)
02-26 15:26:30.602: E/AndroidRuntime(25020): Caused by: java.lang.NumberFormatException: unable to parse 'null' as integer
02-26 15:26:30.602: E/AndroidRuntime(25020):    at java.lang.Integer.parseInt(Integer.java:356)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at java.lang.Integer.parseInt(Integer.java:332)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at CS211D.HW03.PennyConverter.PennyConverterActivity.onCreate(PennyConverterActivity.java:52)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-26 15:26:30.602: E/AndroidRuntime(25020):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-26 15:26:30.602: E/AndroidRuntime(25020):    ... 11 more

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Проблема в том, что вы не инициализируете result, и когда вы вызываете Integer.parseInt(result), он не может проанализировать null.Это видно из полученного исключения:

Причина: java.lang.NumberFormatException: невозможно проанализировать 'null' как целое число

1 голос
/ 27 февраля 2012

В журнале четко указано, что Java не может проанализировать «ноль» как целое число.

0 голосов
/ 20 февраля 2013

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

result = 0;

это также не будет работать: result = "".

...