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)
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.