nativescript-google-maps-sdk
nativescript-google-maps-sdk copied to clipboard
Application crash on location.back() action after opening external application like camera or gallery
I have a problem with application written with NativeScript and Angular on Android (this is only Android app). This app is using dapriett/nativescript-google-maps-sdk
, NativeScript/nativescript-camera
and nativescript-imagepicker
Repo url: https://github.com/d-mh/nativescript-google-maps-crash
Application crash every time when I do below steps:
- Load Google Maps on on main page (
map.component.ts
) - Navigate to second component (
event.component.ts
) - fab button on right bottom side of page - On
event.component.ts
I am opening image picker (nativescript-imagepicker
) - Then cancel action (camera or image picker) or pick image
- press
back
button on Android or location.back() - Crash (log below)
What is interesting when I do location.back()
or press back
button on Android without opening camera or image picker, back action works great and without any errors.
I am thinking this issue is related to error below:
System.err: Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class com.google.android.material.stateful.ExtendableSavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/0x2. Make sure other views do not use the same id.
but I am not sure how to change id on View with Angular app ...
Thank you for any inputs!
I am receiving this error:
JS: Angular is running in the development mode. Call enableProdMode() to enable the production mode.
JS: Map Ready
JS: Setting a marker...
JS: Map Ready
JS: Setting a marker...
JS: Camera changed: {"latitude":-33.85999989127037,"longitude":151.1999999731779,"zoom":8,"bearing":0,"tilt":0} false
JS: Selection done: [{"_observers":{},"_options":{"keepAspectRatio":true,"autoScaleFactor":true},"_android":"/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20190902-WA0000.jpg"}]
JS: Selection done: [{"_observers":{},"_options":{"keepAspectRatio":true,"autoScaleFactor":true},"_android":"/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20190902-WA0000.jpg"}]
System.err: An uncaught Exception occurred on "main" thread.
System.err: Calling js method onCreateView failed
System.err: Error: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class com.google.android.material.stateful.ExtendableSavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/0x4. Make sure other views do not use the same id.
System.err: android.view.View.onRestoreInstanceState(View.java:18663)
System.err: android.view.View.dispatchRestoreInstanceState(View.java:18635)
System.err: android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3823)
System.err: android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3829)
System.err: android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3829)
System.err: android.view.View.restoreHierarchyState(View.java:18613)
System.err: com.tns.Runtime.callJSMethodNative(Native Method)
System.err: com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1242)
System.err: com.tns.Runtime.callJSMethodImpl(Runtime.java:1122)
System.err: com.tns.Runtime.callJSMethod(Runtime.java:1109)
System.err: com.tns.Runtime.callJSMethod(Runtime.java:1089)
System.err: com.tns.Runtime.callJSMethod(Runtime.java:1081)
System.err: com.tns.FragmentClass.onCreateView(FragmentClass.java:53)
System.err: androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
System.err: androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
System.err: androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
System.err: androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
System.err: androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
System.err: androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
System.err: androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
System.err: androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
System.err: androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
System.err: androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
System.err: android.os.Handler.handleCallback(Handler.java:873)
System.err: android.os.Handler.dispatchMessage(Handler.java:99)
System.err: android.os.Looper.loop(Looper.java:201)
System.err: android.app.ActivityThread.main(ActivityThread.java:6810)
System.err: java.lang.reflect.Method.invoke(Native Method)
System.err: com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
System.err: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
System.err:
System.err: StackTrace:
System.err: Frame: function:'push.../node_modules/tns-core-modules/ui/frame/frame.js.FragmentCallbacksImplementation.onCreateView', file:'file:///node_modules/tns-core-modules/ui/frame/frame.js:691:0
System.err: Frame: function:'push.../node_modules/tns-core-modules/ui/frame/fragment.js.FragmentClass.onCreateView', file:'file:///node_modules/tns-core-modules/ui/frame/fragment.js:26:0
System.err: at com.tns.Runtime.callJSMethodNative(Native Method)
System.err: at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1242)
System.err: at com.tns.Runtime.callJSMethodImpl(Runtime.java:1122)
System.err: at com.tns.Runtime.callJSMethod(Runtime.java:1109)
System.err: at com.tns.Runtime.callJSMethod(Runtime.java:1089)
System.err: at com.tns.Runtime.callJSMethod(Runtime.java:1081)
System.err: at com.tns.FragmentClass.onCreateView(FragmentClass.java:53)
System.err: at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
System.err: at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
System.err: at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
System.err: at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
System.err: at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
System.err: at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
System.err: at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
System.err: at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
System.err: at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
System.err: at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
System.err: at android.os.Handler.handleCallback(Handler.java:873)
System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
System.err: at android.os.Looper.loop(Looper.java:201)
System.err: at android.app.ActivityThread.main(ActivityThread.java:6810)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
System.err: Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class com.google.android.material.stateful.ExtendableSavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/0x4. Make sure other views do not use the same id.
System.err: at android.view.View.onRestoreInstanceState(View.java:18663)
System.err: at android.view.View.dispatchRestoreInstanceState(View.java:18635)
System.err: at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3823)
System.err: at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3829)
System.err: at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3829)
System.err: at android.view.View.restoreHierarchyState(View.java:18613)
System.err: ... 24 more
You can setup a "application.resumeEvent" and "application.suspendEvent" listener, and for Android only, call "mapView.nativeView.onResume()" and "mapView.nativeView.onPause()" I put a bit of a delay on them, and it seems to help.