Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android dispatchTouchEvent内部看似不可能的NullPointerException_Android_Nullpointerexception - Fatal编程技术网

Android dispatchTouchEvent内部看似不可能的NullPointerException

Android dispatchTouchEvent内部看似不可能的NullPointerException,android,nullpointerexception,Android,Nullpointerexception,我有一个Android应用程序,在我的dispatchTouchEvent实现中有一个NullPointerException,它在一些设备上崩溃。我从来没有在我的任何设备上看到过崩溃,但它每天在现场发生很多次,因为我在自己的分析和Android开发者控制台中都看到了崩溃。问题是,我很难弄清楚这次崩溃可能是如何发生的。以下是相关代码(我在代码中标记了“CRASH Here->”引发NullPointerException的位置): 根据我的理解,引发NullPointerException的唯一

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

根据我的理解,引发NullPointerException的唯一方法是如果
事件
null
,但是,在它上面的一行,我添加了一些妄想检查
事件
是否为
null
,甚至事件是否有指针。尽管如此,我还是会崩溃。我觉得我错过了什么。有人对此有什么见解吗?

0)我认为问题在于您没有处理异常

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

2) 检查您是否正在处理错误的数据类型,例如,您没有将字符串用作整数

3) 若异常不是bug,则使用try Catch语句处理异常

4) 使用Log.d(“乐趣上的值”,“motionStartX=“+motionStartX”,motionStartY=“+motionStartY+”,event.getX()=“+event.getX()”,event.getY()=“+event.getY()); Tp弹簧值,如果有值,则没有空点

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
       }
  }

阿米尔,谢谢你的回复。0). 当然,我可以把它放进一个try-catch块,然后用这种方式解决问题。但是,我想理解为什么会抛出NullPointerException。1). motionStartX和motionStartY在我引用的代码上方初始化。否则代码将无法编译。2). 我不确定将字符串作为整数处理将如何导致NullPointerException。你能说得更具体些吗?我可以使用什么字符串作为整数,在什么上下文中?由于Java是类型化的,这类东西通常很难通过编译器。3). 与0.4相同)。我尝试过类似于您建议的记录值。首先,正如我在问题中提到的,我不能在我的设备上复制这个,所以Log.d没有帮助。第二,我确实添加了关于这方面的分析,以了解发生了什么,但它显示这里使用的任何东西都不是空的。如果您无法在您的设备和模拟器上找到问题。你能找出是什么类型的设备或特定设备导致了这个问题(客户/消费者的任何回应),可能是硬件问题或某些特定设备的配置问题。正如我在问题中所说,我无法在我的设备上重现这个问题,所以我看不出我的logcat输出有什么用处。
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
       }
  }