我有一个 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 event
is null
,但是,在它上面的行上,我添加了一些偏执检查是否event
存在null
,甚至该事件是否有指针。尽管如此,我还是遇到了崩溃。我觉得我错过了什么。有没有人对此有任何见解?