Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Unity IAP: java.lang.NullPointerException

Discussion in 'Unity IAP' started by Niels-Wosylus, May 31, 2018.

  1. Niels-Wosylus

    Niels-Wosylus

    Joined:
    Jan 26, 2014
    Posts:
    7
    Hi. With the latest release of Unity IAP 1.19 we have been getting crashlogs from some of our users on Android. We are not exactly sure when this crash occurs or why, but I copied the details below

    Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.BaseBundle.get(java.lang.String)' on a null object reference
    at com.unity.purchasing.googleplay.IabHelper.getResponseCodeFromBundle(IabHelper.java:872)
    at com.unity.purchasing.googleplay.IabHelper.queryPurchaseHistory(IabHelper.java:919)
    at com.unity.purchasing.googleplay.IabHelper.queryInventory(IabHelper.java:647)
    at com.unity.purchasing.googleplay.IabHelper.queryInventory(IabHelper.java:598)
    at com.unity.purchasing.googleplay.IabHelper$3.workWith(IabHelper.java:707)
    at com.unity.purchasing.googleplay.BillingServiceManager$2.run(BillingServiceManager.java:146)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    Are anyone else experiencing this? It is occurring on all our games with the new update. Is there are way we can fix it, or will we need for a new update? Is it possible to somehow downgrade Unity IAP (I cannot seem to find previous releases anywhere)?

    Thanks
     
  2. unityjingyao

    unityjingyao

    Unity Technologies

    Joined:
    Feb 20, 2017
    Posts:
    220
    Hi,
    I'm sorry that I couldn't reproduce this issue on my side.
    Is it possible to offer us the full log?
    Could you please send me more information? like Android version, device model?
     
  3. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
  4. Niels-Wosylus

    Niels-Wosylus

    Joined:
    Jan 26, 2014
    Posts:
    7
    Thank you for your reply!

    I put the stack trace here.
    # Crashlytics - plaintext stacktrace downloaded by Niels Wosylus at Sat, 02 Jun 2018 11:05:53 GMT
    # Issue #: 10
    # Issue ID: 5b07ef8f6007d59fcde36940
    # Session ID: 5B1274AE015600012B87B702D2F08F96_DNE_0_v2
    # Date: 2018-06-02T10:43:00Z
    # OS Version: 7.1.1
    # Device: ASUS_X00DD
    # RAM Free: 34.8%
    # Disk Free: 5.4%

    Fatal Exception: java.lang.Error: FATAL EXCEPTION [pool-7-thread-1]
    Unity version : 2018.1.1f1
    Device model : asus ASUS_X00DD
    Device fingerprint: asus/WW_Phone/ASUS_X00DD:7.1.1/NMF26F/14.0200.1803.352-20180302:user/release-keys



    Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.BaseBundle.get(java.lang.String)' on a null object reference
    at com.unity.purchasing.googleplay.IabHelper.getResponseCodeFromBundle(IabHelper.java:872)
    at com.unity.purchasing.googleplay.IabHelper.queryPurchaseHistory(IabHelper.java:919)
    at com.unity.purchasing.googleplay.IabHelper.queryInventory(IabHelper.java:647)
    at com.unity.purchasing.googleplay.IabHelper.queryInventory(IabHelper.java:598)
    at com.unity.purchasing.googleplay.IabHelper$3.workWith(IabHelper.java:707)
    at com.unity.purchasing.googleplay.BillingServiceManager$2.run(BillingServiceManager.java:146)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #0. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #1. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #2. TcmReceiver
    at android.net.LocalSocketImpl.readba_native(LocalSocketImpl.java)
    at android.net.LocalSocketImpl.-wrap1(LocalSocketImpl.java)
    at android.net.LocalSocketImpl$SocketInputStream.read(LocalSocketImpl.java:110)
    at com.qti.tcmclient.DpmTcmClient$TcmReceiver.run(DpmTcmClient.java:140)
    at java.lang.Thread.run(Thread.java:761)

    #3. FinalizerWatchdogDaemon
    at java.lang.Thread.sleep(Thread.java)
    at java.lang.Thread.sleep(Thread.java:371)
    at java.lang.Thread.sleep(Thread.java:313)
    at java.lang.Daemons$FinalizerWatchdogDaemon.sleepFor(Daemons.java:314)
    at java.lang.Daemons$FinalizerWatchdogDaemon.waitForFinalization(Daemons.java:336)
    at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:253)
    at java.lang.Thread.run(Thread.java:761)

    #4. OkHttp ConnectionPool
    at java.lang.Object.wait(Object.java)
    at com.android.okhttp.ConnectionPool.performCleanup(ConnectionPool.java:307)
    at com.android.okhttp.ConnectionPool.runCleanupUntilPoolIsEmpty(ConnectionPool.java:244)
    at com.android.okhttp.ConnectionPool.-wrap0(ConnectionPool.java)
    at com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:98)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #5. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #6. GoogleApiHandler
    at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:139)
    at android.os.HandlerThread.run(HandlerThread.java:61)

    #7. UnityMain
    at com.unity3d.player.UnityPlayer.nativeRender(Unknown Source)
    at com.unity3d.player.UnityPlayer.c(Unknown Source)
    at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source)
    at android.os.MessageQueue.next(MessageQueue.java:392)
    at android.os.Looper.loop(Looper.java:139)
    at com.unity3d.player.UnityPlayer$e.run(Unknown Source)

    #8. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #9. pool-7-thread-2
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #10. pool-7-thread-1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:421)
    at java.util.concurrent.FutureTask.get(FutureTask.java:163)
    at com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:43)
    at com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:285)
    at com.crashlytics.android.core.CrashlyticsController$5.onUncaughtException(CrashlyticsController.java:269)
    at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:30)
    at com.unity3d.player.k.uncaughtException(Unknown Source)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)

    #11. AsyncTask #1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:438)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #12. FMODAudioDevice
    at android.media.AudioTrack.native_write_byte(AudioTrack.java)
    at android.media.AudioTrack.write(AudioTrack.java:1920)
    at android.media.AudioTrack.write(AudioTrack.java:1857)
    at org.fmod.FMODAudioDevice.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:761)

    #13. Measurement Worker
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:407)
    at com.google.android.gms.internal.zzcki.run(Unknown Source)

    #14. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #15. HeapTaskDaemon
    at dalvik.system.VMRuntime.runHeapTasks(VMRuntime.java)
    at java.lang.Daemons$HeapTaskDaemon.run(Daemons.java:433)
    at java.lang.Thread.run(Thread.java:761)

    #16. pool-2-thread-1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1091)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #17. ReferenceQueueDaemon
    at java.lang.Object.wait(Object.java)
    at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:150)
    at java.lang.Thread.run(Thread.java:761)

    #18. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #19. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #20. pool-5-thread-1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1103)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #21. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #22. Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:519)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #23. Answers Events Handler1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1103)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
    at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
    at java.lang.Thread.run(Thread.java:761)

    #24. FinalizerDaemon
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:407)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:188)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:209)
    at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:204)
    at java.lang.Thread.run(Thread.java:761)

    #25. AsyncTask #4
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:438)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #26. AsyncTask #3
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:438)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #27. Crashlytics Exception Handler1
    at dalvik.system.VMStack.getThreadStackTrace(VMStack.java)
    at java.lang.Thread.getStackTrace(Thread.java:1566)
    at java.lang.Thread.getAllStackTraces(Thread.java:1616)
    at com.crashlytics.android.core.CrashlyticsController.writeSessionEvent(CrashlyticsController.java:1114)
    at com.crashlytics.android.core.CrashlyticsController.writeFatal(CrashlyticsController.java:852)
    at com.crashlytics.android.core.CrashlyticsController.access$400(CrashlyticsController.java:59)
    at com.crashlytics.android.core.CrashlyticsController$6.call(CrashlyticsController.java:292)
    at com.crashlytics.android.core.CrashlyticsController$6.call(CrashlyticsController.java:285)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
    at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
    at java.lang.Thread.run(Thread.java:761)

    #28. pool-1-thread-1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2035)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    #29. UnityChoreographer
    at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:139)
    at android.os.HandlerThread.run(HandlerThread.java:61)

    #30. AsyncTask #2
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2127)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:438)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)


    These are the devices we have seen mostly be affected:

    Galaxy S7
    SM-A720F
    Galaxy J5
    Galaxy S6 Active
    Galaxy S5
    Galaxy Tab3 Lite 7.0
    SM-N950F
    Galaxy Tab3 8.0
    Galaxy J1(2016)
    SM-J106B
    Moto G (5) Plus
    Moto G (5S) Plus
    ONEPLUS A5000
    HTC One Google Play edition
    HUAWEI (unknown models)

    I will try downgrading Unity IAP to a previous version to see if that helps.
     
  5. unityjingyao

    unityjingyao

    Unity Technologies

    Joined:
    Feb 20, 2017
    Posts:
    220
    Hi,
    Thank you so much for sending me this information!
    This crash might be caused by google play in-app billing service. It would return a null value in some circumstance.
    We're going to add more check for the returned bundle by google play service. The fix should be included in next release.
    I apologize for any inconvenience this issue has caused.
    Thank you again for reporting this issue and your patience.
     
  6. MBG-Andrew

    MBG-Andrew

    Joined:
    Jun 1, 2018
    Posts:
    2
    Is this being tracked on the issue tracker?
     
  7. cfkhanh

    cfkhanh

    Joined:
    Dec 3, 2014
    Posts:
    3
    Hi,
    We have the same issues. If you need log to investigate the bugs, please see the attachment file.
     
  8. faisalimrann

    faisalimrann

    Joined:
    Jan 3, 2017
    Posts:
    1
    hi,
    I have same issue. any solution ?
     
  9. MorenoBralts

    MorenoBralts

    Joined:
    May 23, 2017
    Posts:
    19
    We are also having some users with this type of crash, happened along with the 1.19 IAP update. Will the next release be a bugfix release and will it release soon? I'm considering downgrading to 1.17
     
  10. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    There is no specific time frame, but hopefully within 2-4 weeks for the next release.
     
  11. SamiSdd

    SamiSdd

    Joined:
    Mar 12, 2015
    Posts:
    11
  12. Leonid

    Leonid

    Joined:
    Aug 20, 2013
    Posts:
    90
    Hello! I have the same issue. @JeffDUnity3D can you please tell me, Is it fixed in new version?
     
  13. unityjingyao

    unityjingyao

    Unity Technologies

    Joined:
    Feb 20, 2017
    Posts:
    220
    Last edited: Jul 3, 2018
  14. Leonid

    Leonid

    Joined:
    Aug 20, 2013
    Posts:
    90
    Hi! Thanks for reply! The latest version is 1.20.0. We need to downgrade?
     
  15. unityjingyao

    unityjingyao

    Unity Technologies

    Joined:
    Feb 20, 2017
    Posts:
    220
    Hi @Leonid ,
    I'm so sorry that it should be v1.20.0.
    I've edited my previous reply.
     
    Leonid likes this.
  16. Niels-Wosylus

    Niels-Wosylus

    Joined:
    Jan 26, 2014
    Posts:
    7
    We've got another one of these in the new version 1.22. I've downgraded to 1.20 to see if that helps, but I will just throw you the info here again.

    Fatal Exception: java.lang.Error: FATAL EXCEPTION [pool-4-thread-1]
    Unity version : 2018.3.8f1
    Device model : samsung SM-J400M
    Device fingerprint: samsung/j4lteub/j4lte:8.0.0/R16NW/J400MUBS2ASC2:user/release-keys

    Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.BaseBundle.get(java.lang.String)' on a null object reference
    at com.unity.purchasing.googleplay.IabHelper.getResponseCodeFromBundle(IabHelper.java:1066)
    at com.unity.purchasing.googleplay.IabHelper$3.workWith(IabHelper.java:608)
    at com.unity.purchasing.googleplay.BillingServiceManager$2.run(BillingServiceManager.java:146)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    ----------

    ReferenceQueueDaemon
    at java.lang.Object.wait(Object.java)
    at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:178)
    at java.lang.Daemons$Daemon.run(Daemons.java:103)
    at java.lang.Thread.run(Thread.java:764)

    FinalizerWatchdogDaemon
    at java.lang.Thread.sleep(Thread.java)
    at java.lang.Thread.sleep(Thread.java:373)
    at java.lang.Thread.sleep(Thread.java:314)
    at java.lang.Daemons$FinalizerWatchdogDaemon.sleepFor(Daemons.java:342)
    at java.lang.Daemons$FinalizerWatchdogDaemon.waitForFinalization(Daemons.java:364)
    at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:281)
    at java.lang.Daemons$Daemon.run(Daemons.java:103)
    at java.lang.Thread.run(Thread.java:764)

    UnityChoreographer
    at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
    at android.os.MessageQueue.next(MessageQueue.java:325)
    at android.os.Looper.loop(Looper.java:142)
    at android.os.HandlerThread.run(HandlerThread.java:65)

    pool-1-thread-1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1086)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    OkHttp ConnectionPool
    at java.lang.Object.wait(Object.java)
    at com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:101)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    FinalizerDaemon
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:422)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:188)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:209)
    at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:232)
    at java.lang.Daemons$Daemon.run(Daemons.java:103)
    at java.lang.Thread.run(Thread.java:764)

    Okio Watchdog
    at java.lang.Object.wait(Object.java)
    at com.android.okhttp.okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:311)
    at com.android.okhttp.okio.AsyncTimeout.-wrap0(Unknown Source)
    at com.android.okhttp.okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:286)

    pool-4-thread-2
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    pool-1-thread-3
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1086)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:548)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:548)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    pool-4-thread-1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:450)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:43)
    at com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:321)
    at com.crashlytics.android.core.CrashlyticsController$6.onUncaughtException(CrashlyticsController.java:301)
    at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:42)
    at com.unity3d.player.m.uncaughtException(Unknown Source:94)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1953)

    pool-1-thread-2
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1086)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    queued-work-looper
    at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
    at android.os.MessageQueue.next(MessageQueue.java:325)
    at android.os.Looper.loop(Looper.java:142)
    at android.os.HandlerThread.run(HandlerThread.java:65)

    main
    at android.os.BinderProxy.transactNative(Binder.java)
    at android.os.BinderProxy.transact(Binder.java:761)
    at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:965)
    at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:7082)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2311)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1785)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7825)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
    at android.view.Choreographer.doCallbacks(Choreographer.java:723)
    at android.view.Choreographer.doFrame(Choreographer.java:658)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
    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.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

    Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:548)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:548)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    Measurement Worker
    at android.database.sqlite.SQLiteSession.releaseConnection(Unknown Source)
    at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:442)
    at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401)
    at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:683)
    at com.google.android.gms.measurement.internal.zzao.zzr(Unknown Source:199)
    at com.google.android.gms.measurement.internal.zzeb.zza(Unknown Source:27)
    at com.google.android.gms.measurement.internal.zzem.run(Unknown Source:7)
    at com.google.android.gms.measurement.internal.zzeb.zzlj(Unknown Source:264)
    at com.google.android.gms.measurement.internal.zzeb.zza(Unknown Source:224)
    at com.google.android.gms.measurement.internal.zzev.run(Unknown Source:6)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at com.google.android.gms.measurement.internal.zzbv.run(Unknown Source:20)

    Answers Events Handler1
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2101)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1132)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
    at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
    at java.lang.Thread.run(Thread.java:764)

    UnityMain
    at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
    at android.os.MessageQueue.next(MessageQueue.java:325)
    at android.os.Looper.loop(Looper.java:142)
    at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)

    Crashlytics Exception Handler1
    at dalvik.system.VMStack.getThreadStackTrace(VMStack.java)
    at java.lang.Thread.getStackTrace(Thread.java:1536)
    at java.lang.Thread.getAllStackTraces(Thread.java:1586)
    at com.crashlytics.android.core.CrashlyticsController.writeSessionEvent(CrashlyticsController.java:1340)
    at com.crashlytics.android.core.CrashlyticsController.writeFatal(CrashlyticsController.java:1027)
    at com.crashlytics.android.core.CrashlyticsController.access$500(CrashlyticsController.java:69)
    at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:328)
    at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:321)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
    at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
    at java.lang.Thread.run(Thread.java:764)

    Queue
    at java.lang.Object.wait(Object.java)
    at java.lang.Thread.parkFor$(Thread.java:2135)
    at sun.misc.Unsafe.park(Unsafe.java:358)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
    at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:548)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
    at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1087)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

    That's all I could pull from it. Hope it helps. Thanks.
     
  17. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    @Niels-Wosylus What version of Android? Can you try with 2018.3.13?
     
  18. seven_

    seven_

    Joined:
    Sep 30, 2014
    Posts:
    42
    Getting these errors as well... Here more details. Are there any fixes or when might they arrive (bug seems to be around for 1 year now...)? Not too good, as it happens when users finally decide to do purchases....

    Unity 2018.3.11, Unity IAP 1.22.0

    Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.BaseBundle.get(java.lang.String)' on a null object reference
    at com.unity.purchasing.googleplay.IabHelper.getResponseCodeFromBundle(IabHelper.java:1066)
    at com.unity.purchasing.googleplay.IabHelper$3.workWith(IabHelper.java:608)
    at com.unity.purchasing.googleplay.BillingServiceManager$2.run(BillingServiceManager.java:146)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:760)

    Example Devices:
    Xiaomi MI 5s Plus, Android 7
    Xiaomi Mi A1, Android 9
    Xiaomi Redmi 4A, Android 7.1.2
    Samsung Galaxy Ace3, Android 4.2.2
    Samsung Galaxy Note2, Android 4.4.2
    Samsung Galaxy Tab3 Lite 7.0, Android 4.4.4
     
  19. MonkeyDevD

    MonkeyDevD

    Joined:
    Feb 28, 2018
    Posts:
    13
    Inspecting the 1.21 and 1.22, there is a clear cause and a clear regression here.


    Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.BaseBundle.get(java.lang.String)' on a null object reference

    In IabHelper, getResponseCodeFromBundle(Bundle b) 1.21 has:
    Code (CSharp):
    1. int getResponseCodeFromBundle(Bundle b)
    2.   {
    3.     Object o;
    4.     if (b != null)
    5.     {
    6.       o = b.get("RESPONSE_CODE");
    7.       if (o != null) {}
    8.     }
    9.     else
    10.     {
    11.       logDebug("Bundle with null response code, assuming OK (known issue)");
    12.       return 0;
    13.     }
    14.     else
    where 1.22 has:
    Code (CSharp):
    1.  
    2. int getResponseCodeFromBundle(Bundle b)
    3.   {
    4.     Object o = b.get("RESPONSE_CODE");
    5.     if (o == null)
    6.     {
    7.       logDebug("Bundle with null response code, assuming OK (known issue)");
    8.       return 0;
    9.     }
    10.  
     
  20. seven_

    seven_

    Joined:
    Sep 30, 2014
    Posts:
    42
    This is good to know, so downgrading might fix it. Seems Unity is not only neglecting non-Google Play and non-iOS build targets, but also these main target platforms suffer from bugs not being fixed for a long time or simply being reintroduced.
     
  21. unity_akeem

    unity_akeem

    Unity Technologies

    Joined:
    Apr 25, 2019
    Posts:
    20
    Hello all, I am looking into this. Could someone provide steps to reproduce? What method are you calling that results in this error?
     
  22. seven_

    seven_

    Joined:
    Sep 30, 2014
    Posts:
    42
    Nothing special. Plain usage as described in your manuals... If you refactored the code for 1.22 as stated above, it is quite obvious that a NullPointerException is thrown if Bundle b is null.
    If only happens on some devices, e.g., Galaxy Mega 6.3, Redmi 3, Galaxy J7, Galaxy S4 Mini, Remi 7, Galaxy J5, Galaxy J7 Neo, Galaxy Tab4 8.0.
    Users experience the very same crash multiple times, so it is not a one-time thing.
     
  23. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    @seven_ "Nothing special" does not really help us to reproduce. Before we can pass this to engineering, we need to be able to reproduce. Are you explicitly calling the bundle method? Yes I know that is our code, but we need to know how/when you are triggering it. Is this during IAP initialization or during a purchase? What type of product? What version of Android do these devices have?
     
  24. seven_

    seven_

    Joined:
    Sep 30, 2014
    Posts:
    42
    Are you joking me? No, I am not calling Java code. This is entirely your plugin that handles the .java side. The method in question is most likely called by Android/Google Play.

    In our case, I can see crashes when a user tries to initiate a purchase, at least this is what I can see from our internal crash logging. Very sad, as the user actually wants to spend money. It happens for consumable products, but non-consumable are most likely the same. Android versions range from 4 to 8 in the last days.

    com.unity.purchasing.googleplay.IabHelper.getResponseCodeFromBundle (IabHelper.java:1066)
    com.unity.purchasing.googleplay.IabHelper$3.workWith (IabHelper.java:608)
    com.unity.purchasing.googleplay.BillingServiceManager$2.run (BillingServiceManager.java:146)

    The stack trace at the very top of this thread is in another case though, as can be seen.

    I am quite surprised how long it seems to take to fix a simple null pointer exception, which seems to have been handled properly in a previous plugin version, stating that the null pointer is a known issue... The refactoring between 1.21 and 1.22 is simply wrong (provided the code above is correct) and seems to have been performed by someone not really understanding what they do... Considering the amount of people "working" on this simple issue on the Unity side, lets me just shake my head.
     
  25. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    We are not able to reproduce here. Not sure what you mean by joking, engineering requires that we reproduce the issue first, and provide device logs. Of course it's in our code, as I mentioned. We still need steps to reproduce so that we can test any potential fix. Do you have one of the affected devices, can you reproduce?
     
    Last edited: Jun 19, 2019
  26. seven_

    seven_

    Joined:
    Sep 30, 2014
    Posts:
    42
    Okay, I will stop my comments on the issue here, and leave it to the public judge this piece of "Unity at its best".
     
  27. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    Fun comments aside, this does look like a regression. I've reopened the previous issue, and let the IAP team know. Hopefully they can take a look at this for the next release!
     
    MonkeyDevD likes this.
  28. fugstudio

    fugstudio

    Joined:
    Mar 22, 2018
    Posts:
    3
    we also have same issue with unity 2018.4.2f1 and IAP 1.22.0 .we hope you can fix it asap .thanks
     
  29. MonkeyDevD

    MonkeyDevD

    Joined:
    Feb 28, 2018
    Posts:
    13
    Please consider making it opensource, so others can contribute.
     
  30. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    If anyone has clear steps to reproduce on a device that they own, please comment here. We are not able to directly reproduce and can only guess at the code changes, and then there is no way to directly test. Purchases work as expected on my Android devices.
     
  31. thiagolrosa

    thiagolrosa

    Joined:
    Feb 22, 2017
    Posts:
    60
    Crash still happening...

    Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)' on a null object reference
    at com.unity.purchasing.googleplay.IabHelper.getResponseCodeFromBundle + 1066(IabHelper.java:1066)
    at com.unity.purchasing.googleplay.IabHelper$3.workWith + 608(IabHelper.java:608)
    at com.unity.purchasing.googleplay.BillingServiceManager$2.run + 146(BillingServiceManager.java:146)
    at java.util.concurrent.ThreadPoolExecutor.runWorker + 1113(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run + 588(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run + 818(Thread.java:818)


    Brand: samsung
    Model: Galaxy Note4
    Version: 6.0.1
     
  32. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    Please see my previous post.
     
  33. murphybeck

    murphybeck

    Joined:
    Sep 20, 2019
    Posts:
    1
    NullPointerExceptions are exceptions that occur when you try to use a reference that points to no location in memory (null) as though it were referencing an object. Calling a method on a null reference or trying to access a field of a null reference will trigger a NullPointerException.

    For example,

    String s = null;
    int len = s.length(); // NullPointerException because s is null

    So you should check if the variable is null before calling any method on it, for example:

    int len;
    if (s == null) {
    len = 0;
    }
    else {
    len = s.length(); // safe, s is never null when you get here
    }

    How to avoid NullPointerExceptions?

    • Use the final modifier to enforce good initialization.
    • Avoid returning null in methods, for example returning empty collections when applicable.
    • Use annotations @NotNull and @Nullable
    • Fail fast and use asserts to avoid propagation of null objects through the whole application when they shouldn't be null.
    • Use equals with a known object first: if("knownObject".equals(unknownObject)
    • Prefer valueOf() over toString().
    • Use null safe StringUtils methods StringUtils.isEmpty(null).
     
  34. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    I suspect the NRE is not in the user's code, but in the IAP code. Regardless, we need steps to reproduce. If we spot such an issue, yes your suggestions are valid.