当前位置: 首页 > 知识库问答 >
问题:

dispatchTouchEvent内部看似不可能的NullPointerException

江飞章
2023-03-14

我有一个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的唯一方法是如果事件null,但是,在它上面的一行,我添加了一些妄想检查事件是否为null,甚至事件是否有指针。尽管如此,我还是会崩溃。我觉得我错过了什么。有人对此有什么见解吗?

共有1个答案

方浩旷
2023-03-14

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

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

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

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

4) 使用日志。d(“有趣的价值观”,“运动开始发送=”运动开始发送“,运动开始发送=”运动开始发送“,event.getX()=”事件。getX()”,event.getY()=”事件。getY());TpSpring值,如果有值,则没有空点,

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
       }
  }
 类似资料:
  • 我有一个组件,我将一些数据放入变量中,以便在另一个函数中读取它。当我在构造函数中打印这个变量并在控制台上打印它时,我可以看到它,但是当我在另一个函数中执行同样的操作时,我没有定义它。我已经尝试将它声明为私有和公共,并得到相同的结果。 如何声明此变量以查看另一个方法中的变量? 这是我的组件: 编辑: 如果我把一个静态常数放在我的函数上,我可以得到数据: 但如果我这样做: 我得到了一个错误: 属性'm

  • 如何查看已安装的Karaf功能的内部? 它还有其他功能吗? 它安装的是什么捆绑包和起始级别? 我说的是超文本传输协议的之类的特性。

  • https://leetcode.com/problems/find-all-numbers-dispapered-in-an-array/discuss/93007/simple-java-in-place-sort-solution 你能查一下上面的链接吗? 我看不懂密码 然后,第一个只是简单地使用我们可以检查是不是值。 第二个, 它最终也是一样的东西,只是为了证明索引值=index+1。 但

  • 我们在MapStruct中使用不可变项,在将实体转换为dto时遇到问题。 mapper类 在出现错误的情况下,问题是完全相同的 我检查了mapstruct与不可变的测试,没有什么不同https://github.com/mapstruct/mapstruct/blob/master/integrationtest/src/test/resources/immutablesBuilderTest/m

  • 或者在flutter中,我可以以某种方式覆盖所有RaisedButton类具有相同高度的样式--不要说字体/颜色?

  • 问题内容: 背景 :我正在编写一个应该管理我的音乐文件的python程序。它将爬网目录,并将文件和它们的元数据(通过mutagen)(通过mutagen)放入JSON中,作为简单的“数据库”。我的目录搜索很好,但是当我尝试保存数据库或将其编码为JSON时,它会引发“ TypeError:{…}不可序列化JSON”(…是字典中的一些键和值,更多有关以下内容) 问题 :程序按照以下格式构建大型词典对象