fbsamples / audience-network

Open source projects to demonstrate SDK and sample code usages and integration, and to collaborate and support peers in this community.
https://developers.facebook.com/docs/audience-network
Other
319 stars 370 forks source link

Attempt to invoke virtual method 'void com.facebook.ads.internal.s.a.r.a(android.view.MotionEvent, android.view.View, android.view.View)' on a null object reference com.facebook.ads.internal.view.b.a.onTouchEvent #74

Closed d-u-a-l closed 6 years ago

d-u-a-l commented 6 years ago

Lately I have a lot of crashes, reported by Crashlytics, with stacktrace like

Fatal Exception: java.lang.RuntimeException: Unable to destroy activity {MY_APP_PACKAGE/MY_APP_PACKAGE.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.ads.internal.s.a.r.a(android.view.MotionEvent, android.view.View, android.view.View)' on a null object reference at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3993) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4011) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4211) at android.app.ActivityThread.access$800(ActivityThread.java:183) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5668) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.ads.internal.s.a.r.a(android.view.MotionEvent, android.view.View, android.view.View)' on a null object reference at com.facebook.ads.internal.view.b.a.onTouchEvent(Unknown Source) at android.view.View.dispatchTouchEvent(View.java:8601) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2482) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2157) at android.view.ViewGroup.cancelTouchTarget(ViewGroup.java:2395) at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:4530) at android.view.ViewGroup.removeAllViews(ViewGroup.java:4483) at com.facebook.ads.AdView.destroy(Unknown Source) at MY_APP_PACKAGE.Utils.AdMediator.dispose(Unknown Source) at MY_APP_PACKAGE.MainActivity.onDestroy(Unknown Source) at android.app.Activity.performDestroy(Activity.java:6349) at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1148) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3980) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4011) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4211) at android.app.ActivityThread.access$800(ActivityThread.java:183) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5668) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)

I show AdView in MainActivity (simple banner), I create it in my AdMediator (which is created in onCreate method of MainActivity) and dispose of it in dispose method, which is called in activity's onDestroy, like it was advised in manual:

    @Override
    protected void onDestroy() {
        if (adMediator != null) {
            adMediator.dispose();
        }
        ...
        super.onDestroy();
    }
    public void dispose() {
        if (fanView != null) {
            fanView.destroy();
            fanView = null;
        }
    }

I use 4.28.1 version of Audience Network SDK Don't exactly know, if this would be helpful, but if ad is not loaded, I set visibility of AdView as INVISIBLE

            @Override
            public void onError(Ad ad, AdError adError) {
                fanFailed = true;
                if (fanView != null) fanView.setVisibility(View.INVISIBLE);
                showNext();
            }
phzhou commented 6 years ago

Thanks @d-u-a-l but could you create a fragment/activity class with the similar logic you used so we can reproduce the issue? Thanks!

d-u-a-l commented 6 years ago

I guess, I could, but after updating lib to latest version, I don't receive such logs in Crashlytics for new release. Guess, you've already fixed it. Thanks