Откуда исходит мое NullPointerException? - PullRequest
0 голосов
/ 04 марта 2011

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

java.lang.NullPointerException at com.espian.formulae.ListMenu.thermoItemClick(ListMenu.java:754) at com.espian.formulae.ListMenu$2.onItemClick(ListMenu.java:386) at android.widget.AdapterView.performItemClick(AdapterView.java:284) at android.widget.ListView.performItemClick(ListView.java:3672) at android.widget.AbsListView$PerformClick.run(AbsListView.java:1829) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4633) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(Native Method)

и это оскорбительный метод:

protected void thermoItemClick(int position) {

    Intent i = new Intent();
    TextView t = (TextView)lv.getChildAt(position);

    switch (position) {
        case 0: //Thermo functions
            i.setClass(getApplicationContext(), Tab_Hoster.class);
            i.putExtra(Tab_Hoster.EXTRA, Tab_Hoster.TAB_THERMO);
            break;
        case 1: //C-C equation
        case 2: // C equation
        case 3: //vant hoff
        case 4:
        case 5:
        case 6:
            i.setClass(getApplicationContext(), Equation.class);
            break;
        default:
            i = null;
    }
    if (i != null) {
        String s = (String) t.getText();
        i.putExtra(States.KEY_E, s);
        i.putExtra(States.TABLE, States.EQUATION);
        startActivity(i);
    }

    if (cleanscreen)
        this.finish();
}

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

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

Поскольку это происходит только в первый раз, скорее всего, что-то не инициализировано.Откуда берется переменная cleanscreen?Это глобальная переменная?Инициализируется ли он во время onCreate или когда он объявлен?

Скорее всего, текстовое представление пусто.Если t пусто (ноль), то

String s = (String) t.getText()

будет нулевым.

0 голосов
/ 04 марта 2011

Если TextView t = (TextView)lv.getChildAt(position); вызван неправильно (т. Е. Lv не включает никакого View в этой позиции), то t будет нулевым, а t.getText() выдаст исключение.

В общем, я рекомендую избегатьзагрузка видов с использованием ViewGroup.getChildAt ().это просто не безопасно.Я предполагаю, что вы динамически создаете макет, поэтому вы не можете найти ViewById этого TextView.Что я делаю в подобных случаях, когда я динамически строю макеты, я также назначаю идентификаторы этим макетам (сохраняю их на карте или в памяти), а затем использую очень безопасный метод findViewById.

0 голосов
/ 04 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...