dispatchTouchEvent中看似不可能的NullPointerException

时间:2012-12-08 05:38:47

标签: android nullpointerexception

我有一个Android应用程序在某些设备上崩溃,在我的dispatchTouchEvent实现中有一个NullPointerException。我从来没有真正看到崩溃发生在我的任何设备上,但它每天都会在现场发生多次,因为我在自己的分析和Android Developer控制台中都看到了崩溃。问题是我很难弄清楚这次崩溃是如何发生的。这是相关代码(我在代码中标记了“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))
        {
            ...
        }
    }
}

根据我的理解,如果eventnull,则可以抛出NullPointerException的唯一方法,但是,就在它上方的行上,我添加了一些偏执检查event null甚至事件都有指针。不过,我正在崩溃。我觉得我错过了什么。有没有人对此有任何见解?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

4)使用Log.d(“fun on fun”,“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
       }
  }