【问题标题】:Android: Can't figure this exceptionAndroid:无法计算此异常
【发布时间】:2015-06-05 00:38:39
【问题描述】:

这是我的异常日志

java.lang.NullPointerException
        at android.view.GestureDetector.onTouchEvent(GestureDetector.java:587)
        at android.widget.Gallery.onTouchEvent(Gallery.java:937)
        at android.view.View.dispatchTouchEvent(View.java:5541)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1951)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1712)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1912)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
        at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
        at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:59)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1860)
        at android.view.View.dispatchPointerEvent(View.java:5721)
        at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890)
        at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466)
        at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845)
        at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4424)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592)
        at dalvik.system.NativeStart.main(Native Method)

单击按钮后会发生这种情况。我可以调试 onClick 事件以查看它是否按预期执行,并使用添加和删除视图替换 GroupView 容器中的视图。

我在代码中没有使用GestureDetector 的地方,也没有使用任何外部库。

我在 Bluestacks 和 appcompact v7:22.2.0 工作

有什么想法吗?或者我还能测试什么?

我的点击监听代码:

    fancyCoverFlow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Command command = Factory.inject(lobbyModel.items.get(position).commandClass);
            command.execute();
        }
    });

来自调试器的线程转储

<1> main@831927632808" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
      at myClass.onItemClick(LobbyScreen.java:47)
      at android.widget.AdapterView.performItemClick(AdapterView.java:292)
      at android.widget.Gallery.onSingleTapUp(Gallery.java:960)
      at android.view.GestureDetector.onTouchEvent(GestureDetector.java:568)
      at android.widget.Gallery.onTouchEvent(Gallery.java:937)
      at android.view.View.dispatchTouchEvent(View.java:5541)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1951)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1712)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1912)
      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
      at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
      at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:59)
      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1860)
      at android.view.View.dispatchPointerEvent(View.java:5721)
      at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890)
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466)
      at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845)
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loop(Looper.java:137)
      at android.app.ActivityThread.main(ActivityThread.java:4424)
      at java.lang.reflect.Method.invokeNative(Method.java:-1)
      at java.lang.reflect.Method.invoke(Method.java:511)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592)
      at dalvik.system.NativeStart.main(NativeStart.java:-1)

Solved

【问题讨论】:

  • 发布你的onClick的代码
  • @njzk2 我添加了它。我如何调试并没有看到任何异常。
  • 你也不使用触摸监听器?
  • 这是做什么的?你提到操纵视图。您是否直接从 AdapterView 中删除视图?
  • @njzk2 不,我有自己的框架,其中屏幕被添加到共享容器中。在这段代码中,我删除了当前屏幕的根视图并移至新屏幕。在调试中,我看到新屏幕已初始化(其布局已成功膨胀)。此外,我的项目中只有一个 Activity。

标签: android nullpointerexception


【解决方案1】:

基于@rhashimoto,我为旧版本添加了一个解决方法。只需覆盖视图类并添加 try catch。

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    try {
        return super.dispatchTouchEvent(event);
    }
    catch (Exception ignored){
        return true;
    }
}

这可能不是最好的解决方案,但它为我解决了问题。

【讨论】:

    【解决方案2】:

    您是在冰淇淋三明治或更早的系统上进行测试吗?它看起来像是在 Jelly Bean 中修复的 Android 错误。

    这是ICS code

    // Hold the event we obtained above - listeners may have changed the original.
    mPreviousUpEvent = currentUpEvent;
    mVelocityTracker.recycle();
    mVelocityTracker = null;
    

    这是Jelly Bean code

    // Hold the event we obtained above - listeners may have changed the original.
    mPreviousUpEvent = currentUpEvent;
    if (mVelocityTracker != null) {
        // This may have been cleared when we called out to the
        // application above.
        mVelocityTracker.recycle();
        mVelocityTracker = null;
    }
    

    看看 Jelly Bean 现在是如何测试 mVelocityTrackernull 吗?我想这就是你的崩溃发生的地方。

    这个错误似乎已经多次遇到,似乎是 ICS 特有的:

    【讨论】:

    • 我添加了其他相关问题的链接;你可以看看这些答案。
    • 我得到了完全相同的错误日志,这是一个随机崩溃,我现在只有一次,但它没有发生在 ICS 上,它发生在 Kitkat 上,所以上面的修改不能成为解决方案。
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2018-05-28
    • 2018-04-12
    • 2012-12-17
    相关资源
    最近更新 更多