Onesignal-flutter-sdk: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference

Created on 24 Dec 2019  路  11Comments  路  Source: OneSignal/OneSignal-Flutter-SDK

Description:

Crashes from Firebase Test Lab

Environment

onesignal_flutter: ^2.3.1

Steps to Reproduce Issue:

Application: https://play.google.com/store/apps/details?id=br.art.code.meucronogramacapilar

Anything else:

Galaxy J7:

Fatal exception
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
     FATAL EXCEPTION: OSH_NetworkHandlerThread
Process: br.art.code.meucronogramacapilar, PID: 30593
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
    at com.onesignal.flutter.FlutterRegistrarResponder.runOnMainThread(FlutterRegistrarResponder.java:57)
    at com.onesignal.flutter.FlutterRegistrarResponder.replySuccess(FlutterRegistrarResponder.java:20)
    at com.onesignal.flutter.OSFlutterChangeTagsHandler.onSuccess(OneSignalTagsController.java:46)
    at com.onesignal.UserStateSynchronizer.sendTagsHandlersPerformOnSuccess(UserStateSynchronizer.java:516)
    at com.onesignal.UserStateSynchronizer.internalSyncUserState(UserStateSynchronizer.java:215)
    at com.onesignal.UserStateSynchronizer.syncUserState(UserStateSynchronizer.java:191)
    at com.onesignal.UserStateSynchronizer$NetworkHandlerThread$1.run(UserStateSynchronizer.java:88)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:158)
    at android.os.HandlerThread.run(HandlerThread.java:61)

Moto E5 Play: OK

LG K3: OK

Motorola One:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
     FATAL EXCEPTION: OSH_NetworkHandlerThread
Process: br.art.code.meucronogramacapilar, PID: 20944
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
    at com.onesignal.flutter.FlutterRegistrarResponder.runOnMainThread(FlutterRegistrarResponder.java:57)
    at com.onesignal.flutter.FlutterRegistrarResponder.replySuccess(FlutterRegistrarResponder.java:20)
    at com.onesignal.flutter.OSFlutterChangeTagsHandler.onSuccess(OneSignalTagsController.java:46)
    at com.onesignal.UserStateSynchronizer.sendTagsHandlersPerformOnSuccess(UserStateSynchronizer.java:516)
    at com.onesignal.UserStateSynchronizer.internalSyncUserState(UserStateSynchronizer.java:215)
    at com.onesignal.UserStateSynchronizer.syncUserState(UserStateSynchronizer.java:191)
    at com.onesignal.UserStateSynchronizer$NetworkHandlerThread$1.run(UserStateSynchronizer.java:88)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.os.HandlerThread.run(HandlerThread.java:65)

Lenovo S5:

Fatal exception
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
     FATAL EXCEPTION: OSH_NetworkHandlerThread
Process: br.art.code.meucronogramacapilar, PID: 7848
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
    at com.onesignal.flutter.FlutterRegistrarResponder.runOnMainThread(FlutterRegistrarResponder.java:57)
    at com.onesignal.flutter.FlutterRegistrarResponder.replySuccess(FlutterRegistrarResponder.java:20)
    at com.onesignal.flutter.OSFlutterChangeTagsHandler.onSuccess(OneSignalTagsController.java:46)
    at com.onesignal.UserStateSynchronizer.sendTagsHandlersPerformOnSuccess(UserStateSynchronizer.java:516)
    at com.onesignal.UserStateSynchronizer.internalSyncUserState(UserStateSynchronizer.java:215)
    at com.onesignal.UserStateSynchronizer.syncUserState(UserStateSynchronizer.java:191)
    at com.onesignal.UserStateSynchronizer$NetworkHandlerThread$1.run(UserStateSynchronizer.java:88)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.os.HandlerThread.run(HandlerThread.java:65)

Medium Priority

All 11 comments

Thanks for reporting, from a quick look it seems to be related flutterRegistrar.activeContext() returning null in some rare cases.

https://api.flutter.dev/javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html

@mikechoch It seems Flutter now recommends binding.getApplicationContext() instead for any contexts. Or if an Activity is needed specific ActivityAware should be used.

To fix the runOnMainThread issue though it would probably be simplest to just use the same implementation we use in the native SDK which does not need a Context.
https://github.com/OneSignal/OneSignal-Android-SDK/blob/c293239518df1b789a6c7d84043692feb0b74d34/OneSignalSDK/onesignal/src/main/java/com/onesignal/OSUtils.java#L308-L315

so, how can i resolve this issue?? i'm facing this issue and i don't know how to fix it

Thanks for your patience. We will try to get this resolved as soon as possible

I got this in a report yesterday. Same error. OnePlus 7T

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference
       at com.onesignal.flutter.FlutterRegistrarResponder.a(FlutterRegistrarResponder.java:8)
       at com.onesignal.flutter.FlutterRegistrarResponder.a(FlutterRegistrarResponder.java:5)
       at com.onesignal.flutter.OSFlutterChangeTagsHandler.a(OSFlutterChangeTagsHandler.java:16)
       at com.onesignal.UserStateSynchronizer.sendTagsHandlersPerformOnSuccess(UserStateSynchronizer.java:17)
       at com.onesignal.UserStateSynchronizer.access$700(UserStateSynchronizer.java)
       at com.onesignal.UserStateSynchronizer$4.a(UserStateSynchronizer.java:36)
       at com.onesignal.OneSignalRestClient$5.run(OneSignalRestClient.java:4)
       at java.lang.Thread.run(Thread.java:919)

Have someone come up with a fix to this? Otherwise here is a similar crash on a Galaxy S9.
Not really sure how this is affecting users. In Firebase Crashlytics it says 88% in background so maybe the users never see the crash.

Please tell me if you need more information or help.

java.lang.NullPointerException: 
  at com.onesignal.flutter.FlutterRegistrarResponder.a (FlutterRegistrarResponder.java:8)
  at com.onesignal.flutter.FlutterRegistrarResponder.a (FlutterRegistrarResponder.java:5)
  at com.onesignal.flutter.OSFlutterChangeTagsHandler.tagsAvailable (OSFlutterChangeTagsHandler.java:16)
  at com.onesignal.OneSignal$15.run (OneSignal.java:63)
  at java.lang.Thread.run (Thread.java:919)

I tried @jkasten2 solution. It seems to be working.

Good to hear @sumitgohil ,
Enjoy!

@rgomezp

Please don't close this issue yet. We still have this issue on our app with latest version of one signal flutter sdk (2.4.1), and I don't see any commit nor pull request merged to address this.

Infact 90% of our crashes are caused by onesignal with the same error.

@jkasten2, @sumitgohil could you please give me some instructions on how to apply the solution?

This needs to kept open, I receive about hundreds of crash report everyday for this. Please Fix this.

Same error I have got in on Multiple devices

Samsung Galaxy J6 (j6lte), 2816MB RAM, Android 9
Samsung Galaxy J7 Prime (on7xelte), 2816MB RAM, Android 8.1
Xiaomi Redmi 5 Plus (vince), 3584MB RAM, Android 8.1
Redmi Redmi 8A Dual (olivewood), 3072MB RAM, Android 9
Samsung Galaxy J6 (j6lte), 2816MB RAM, Android 9
Redmi Redmi 7 (onc), 1792MB RAM, Android 9

java.lang.NullPointerException: 
  at com.onesignal.flutter.FlutterRegistrarResponder.a (FlutterRegistrarResponder.java:8)
  at com.onesignal.flutter.FlutterRegistrarResponder.a (FlutterRegistrarResponder.java:5)
  at com.onesignal.flutter.OSFlutterChangeTagsHandler.tagsAvailable (OSFlutterChangeTagsHandler.java:16)
  at com.onesignal.OneSignal$15.run (OneSignal.java:63)
  at java.lang.Thread.run (Thread.java:764)

Hey guys, we've just created a PR to discuss the solution for this issue based on @jkasten2 solution.

Was this page helpful?
0 / 5 - 0 ratings