From 2b2d80831014b65b4b5c99bd67f9d44c7dfcaf73 Mon Sep 17 00:00:00 2001 From: Lukasz Kozakiewicz Date: Tue, 20 Feb 2018 12:16:13 +0100 Subject: [PATCH] PushNotifications: handle properly null fields in Bundle when decoding notification data. --- .../native/juce_android_PushNotifications.cpp | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/modules/juce_gui_extra/native/juce_android_PushNotifications.cpp b/modules/juce_gui_extra/native/juce_android_PushNotifications.cpp index a1e42f9a12..23258ae2d6 100644 --- a/modules/juce_gui_extra/native/juce_android_PushNotifications.cpp +++ b/modules/juce_gui_extra/native/juce_android_PushNotifications.cpp @@ -1322,15 +1322,22 @@ struct PushNotifications::Pimpl auto key = LocalRef ((jstring) env->CallObjectMethod (iterator, JavaIterator.next)); auto object = LocalRef (env->CallObjectMethod (bundle, JavaBundle.get, key.get())); - auto objectAsString = LocalRef ((jstring) env->CallObjectMethod (object, JavaObject.toString)); - auto objectClass = LocalRef (env->CallObjectMethod (object, JavaObject.getClass)); - auto classAsString = LocalRef ((jstring) env->CallObjectMethod (objectClass, JavaClass.getName)); - // Note: seems that Firebase delivers values as strings always, so this check is rather unnecessary, - // at least till they change the behaviour. - const var value = juceString (classAsString) == "java.lang.Bundle" ? bundleToVar (object) : var (juceString (objectAsString.get())); + if (object.get() != nullptr) + { + auto objectAsString = LocalRef ((jstring) env->CallObjectMethod (object, JavaObject.toString)); + auto objectClass = LocalRef (env->CallObjectMethod (object, JavaObject.getClass)); + auto classAsString = LocalRef ((jstring) env->CallObjectMethod (objectClass, JavaClass.getName)); - dynamicObject->setProperty (juceString (key.get()), value); + // Note: seems that Firebase delivers values as strings always, so this check is rather unnecessary, + // at least till they change the behaviour. + var value = juceString (classAsString) == "java.lang.Bundle" ? bundleToVar (object) : var (juceString (objectAsString.get())); + dynamicObject->setProperty (juceString (key.get()), value); + } + else + { + dynamicObject->setProperty (juceString (key.get()), {}); + } } return var (dynamicObject);