3

我有一个 Android 应用程序在我的 dispatchTouchEvent 实现中使用 NullPointerException 在某些设备上崩溃。我实际上从未在我的任何设备上看到过崩溃,但它每天在现场发生很多次,因为我在自己的分析和 Android 开发者控制台中都看到了崩溃。问题是我很难弄清楚这种崩溃是如何发生的。这是相关代码(我在代码中标记了“CRASH HERE ->”抛出NullPointerException的位置):

if (…)
{
    ...
}
else if (event != null)
{
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        motionStartX = event.getX();
        motionStartY = event.getY();
    }
    else if (event.getAction() == MotionEvent.ACTION_UP)
    {
        ...
        if (...)
        {
            ...
        }
        else if         (event != null && event.getPointerCount() > 0 &&
 /*** CRASH HERE -> ***/(Math.abs(motionStartX - event.getX()) > 5 ||
                         Math.abs(motionStartY - event.getY()) > 5))
        {
            ...
        }
    }
}

据我了解,可能抛出 NullPointerException 的唯一方法是 if eventis null,但是,在它上面的行上,我添加了一些偏执检查是否event存在null,甚至该事件是否有指针。尽管如此,我还是遇到了崩溃。我觉得我错过了什么。有没有人对此有任何见解?

4

1 回答 1

0

0)我认为问题是你没有处理异常。

1)这两个(motionStartX,motionStartY)应该在崩溃代码上面声明并且必须初始化(set),

2)检查您没有处理错误的数据类型,例如您没有使用字符串作为整数。

3)使用try Catch语句处理异常,如果这是异常不是bug

4) 使用 Log.d("有趣的值", "motionStartX = " + motionStartX " , motionStartY= " + motionStartY + " , event.getX() = " + event.getX() " , event.getY() = " + event.getY()); Tp pring 值,如果值存在则没有空点,

else if (event.getAction() == MotionEvent.ACTION_UP)
{
    try{ 
        Log.d("values on function", "motionStartX = " + motionStartX  " , motionStartY= " + motionStartY + " , event.getX() = " + event.getX()  " , event.getY() = " + event.getY());
        ...
        if (...){
            ...
        }
        else if         (event != null && event.getPointerCount() > 0 &&
        /*** CRASH HERE -> ***/(Math.abs(motionStartX - event.getX()) > 5 ||
                     Math.abs(motionStartY - event.getY()) > 5)){
                       ...
        }catch(Exception e){
          //Handle exceptions here, if they are exceptions not bugs in your code
       }
  }
于 2012-12-08T05:57:13.433 回答