Ilya Gazman
Ilya Gazman

Reputation: 32281

Android: Can't figure this exception

This is my exception log

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)

It happens after I click on button. I can debug the onClick event to see that it performs as expected and replace a view in GroupView container, with add and remove View.

I got no place in code where I use GestureDetector, nor I use any external library.

I am working in Bluestacks and appcompact v7:22.2.0

Any ideas what can it be? Or what else can I test?

My click listener code:

    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();
        }
    });

The thread dump from debugger

<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

Upvotes: 4

Views: 1723

Answers (2)

Ilya Gazman
Ilya Gazman

Reputation: 32281

Based on @rhashimoto I added a work around for old versions. Simply overriding the view class and adding a try catch.

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

It might be not the best solution, but it solved the problem for me.

Upvotes: 4

rhashimoto
rhashimoto

Reputation: 15869

Are you testing on an Ice Cream Sandwich or earlier system? It looks like an Android bug that was fixed in Jelly Bean.

Here's the ICS code:

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

And here's the 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;
}

See how Jelly Bean is now testing mVelocityTracker for null? I think that's where your crash happened.

It looks like this bug has been encountered a number of other times, appears specific to ICS:

Upvotes: 1

Related Questions