Android 我的NullPointerException来自哪里?

Android 我的NullPointerException来自哪里?,android,nullpointerexception,Android,Nullpointerexception,我的应用程序目前有一个问题,用户偶尔会点击我的一个选项,并出现NullPointerException。问题是,错误报告不包含任何信息,我不知道为什么会发生这种情况。这是提交的堆栈跟踪: java.lang.NullPointerException 在com.espian.formulas.ListMenu.thermoItemClick上(ListMenu.java:754) 在com.espian.formulas.ListMenu$2.onItemClick(ListMenu.java:3

我的应用程序目前有一个问题,用户偶尔会点击我的一个选项,并出现NullPointerException。问题是,错误报告不包含任何信息,我不知道为什么会发生这种情况。这是提交的堆栈跟踪:

java.lang.NullPointerException
在com.espian.formulas.ListMenu.thermoItemClick上(ListMenu.java:754)
在com.espian.formulas.ListMenu$2.onItemClick(ListMenu.java:386)
在android.widget.AdapterView.performItemClick(AdapterView.java:284)上
在android.widget.ListView.performItemClick(ListView.java:3672)上
在android.widget.AbsListView$PerformClick.run(AbsListView.java:1829)中
位于android.os.Handler.handleCallback(Handler.java:587)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:123)
位于android.app.ActivityThread.main(ActivityThread.java:4633)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
在dalvik.system.NativeStart.main(本机方法)

这就是令人不快的方法:

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次报告,但这很烦人,我想弄清真相


谢谢

我猜您的位置变量与这些情况都不匹配。还可以尝试不同版本的仿真器,可能是特定于版本的。

因为它只在第一次发生时发生,然后很可能没有初始化。变量
cleanscreen
来自哪里?它是一个全局变量吗?它是在onCreate期间初始化的,还是在声明时初始化的

文本视图很可能是空的。如果t为空(null),则

String s=(String)t.getText()

将为空

If
TextView t=(TextView)lv.getChildAt(位置)(即lv在此位置不包含任何视图),则t将为null,
t.getText()
将引发异常

通常,我建议避免使用ViewGroup.getChildAt()加载视图。这不安全。我猜你是在动态地构建布局,这就是为什么你找不到这个文本视图。
在这样的情况下,当我动态构建布局时,我会为这些布局分配ID(将它们存储在地图或内存中),然后使用非常安全的findViewById方法。

哪一行是754?这不是问题的答案,但您可能希望显式地
中断来自您的
默认值:
开关中
我能看到的唯一可能导致该问题的是
TextView t=(TextView)lv.getChildAt(位置)
很抱歉,自从上次错误报告以来,我已经对代码进行了重大更改,因此我无法分辨754是哪一个,sorrycleanscreen是从
SharedReferences
onCreate
中初始化的,t不应该是空的,因为它是从使用字符串数组填充的
ListView
中创建的。人们显然可以看到每一个选择的标签,但是当他们点击它们时会得到NPE?很酷,谢谢。我认为这种方法有点模糊,但我真的不确定如何做-这是一个从
StringArray
填充的
Listview
,那么我该如何为它们分配ID呢?