{ "id": "169540", "key": "TIMOB-25481", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2017-08-15T06:28:05.000+0000", "priority": null, "labels": [], "versions": [], "issuelinks": [], "assignee": null, "updated": "2018-02-28T19:55:38.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "13715", "name": "Hyperloop", "description": "Hyperloop project" } ], "description": "If you place several single hyperloop WebViews (5 pages with 1 WebView each works well to provoke the crash) on an Titanium ScrollableView you get an app crash when navigating through the pages.\r\n\r\nThe crash log:\r\n\r\n```\r\n[ERROR] : TiApplication: (main) [211276,212482] Sending event: exception on thread: main msg:java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.appcelerator.kroll.KrollDict.containsKey(java.lang.Object)' on a null object reference; Titanium 6.1.2,2017/07/27 16:09,undefined\r\n[ERROR] : TiApplication: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.appcelerator.kroll.KrollDict.containsKey(java.lang.Object)' on a null object reference\r\n[ERROR] : TiApplication: \tat org.appcelerator.kroll.KrollProxy.hasProperty(KrollProxy.java:531)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.view.TiUIView.setNativeView(TiUIView.java:338)\r\n[ERROR] : TiApplication: \tat hyperloop.HyperloopView.(HyperloopView.java:49)\r\n[ERROR] : TiApplication: \tat hyperloop.InstanceProxy.createView(InstanceProxy.java:80)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:496)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:482)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:520)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:504)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:482)\r\n[ERROR] : TiApplication: \tat ti.modules.titanium.ui.widget.TiUIScrollableView$ViewPagerAdapter.instantiateItem(TiUIScrollableView.java:580)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:111)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.addNewItem(ViewPager.java:943)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1125)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1025)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager$3.run(ViewPager.java:254)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer.doCallbacks(Choreographer.java:603)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer.doFrame(Choreographer.java:571)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786)\r\n[ERROR] : TiApplication: \tat android.os.Handler.handleCallback(Handler.java:815)\r\n[ERROR] : TiApplication: \tat android.os.Handler.dispatchMessage(Handler.java:104)\r\n[ERROR] : TiApplication: \tat android.os.Looper.loop(Looper.java:194)\r\n[ERROR] : TiApplication: \tat android.app.ActivityThread.main(ActivityThread.java:5576)\r\n[ERROR] : TiApplication: \tat java.lang.reflect.Method.invoke(Native Method)\r\n[ERROR] : TiApplication: \tat java.lang.reflect.Method.invoke(Method.java:372)\r\n[ERROR] : TiApplication: \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)\r\n[ERROR] : TiApplication: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)\r\n```", "attachment": [], "flagged": false, "summary": "Placing Hyperloop WebViews on ScrollableView crashes the app", "creator": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "environment": null, "comment": { "comments": [ { "id": "426852", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "Looking at the errors it looks like it wants to get the {{touchEnabled}} property in this line:\r\nhttps://github.com/appcelerator/titanium_mobile/blob/220d265f74535bc2bc15a7a79362f5673591a8cf/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java#L338\r\nwhich calls hasProperty here:\r\nhttps://github.com/appcelerator/titanium_mobile/blob/6_1_X/android/titanium/src/java/org/appcelerator/kroll/KrollProxy.java#L531\r\nbut {{properties}} is null (released?).\r\n\r\nSo what you could try as a workaround is to increase the {{cacheSize}} of the ScrollableView so it doesn't remove the Hyperloop views.", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-17T15:58:24.000+0000", "updated": "2017-08-17T15:58:24.000+0000" }, { "id": "426894", "author": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "body": "Thank you for having a look! This is what we are ultimately doing and it indeed helped to migitate this issue, but now we need to do the cache management ourselves because it is impacting the ScrollableView's performance. It would be really nice if this could be fixed upstream (add a check for null there?).", "updateAuthor": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-18T05:20:46.000+0000", "updated": "2017-08-18T05:20:46.000+0000" }, { "id": "429790", "author": { "name": "sdarda", "key": "sdarda", "displayName": "Sharif AbuDarda", "active": false, "timeZone": "Asia/Dhaka" }, "body": "Hello [~AppDev], is your issue resolved? Can you provide a update on the latest sdk build? Thanks. ", "updateAuthor": { "name": "sdarda", "key": "sdarda", "displayName": "Sharif AbuDarda", "active": false, "timeZone": "Asia/Dhaka" }, "created": "2017-10-29T19:49:13.000+0000", "updated": "2017-10-29T19:49:13.000+0000" }, { "id": "429805", "author": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "body": "@Sharif AbuDarda Did you change anything relevant for this issue?", "updateAuthor": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-10-30T06:04:12.000+0000", "updated": "2017-10-30T06:04:12.000+0000" }, { "id": "429970", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-11-01T19:40:47.000+0000", "updated": "2017-11-01T19:40:47.000+0000" }, { "id": "429993", "author": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "body": "Not fixed for us on SDK 6.3.0.GA:\r\n\r\n[ERROR] : TiApplication: (main) [237037,263102] Sending event: exception on thread: main msg:java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.appcelerator.kroll.KrollDict.containsKey(java.lang.Object)' on a null object reference; Titanium 6.3.0,2017/10/31 18:13,undefined\r\n[ERROR] : TiApplication: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.appcelerator.kroll.KrollDict.containsKey(java.lang.Object)' on a null object reference\r\n[ERROR] : TiApplication: \tat org.appcelerator.kroll.KrollProxy.hasProperty(KrollProxy.java:580)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.view.TiUIView.setNativeView(TiUIView.java:339)\r\n[ERROR] : TiApplication: \tat hyperloop.HyperloopView.(HyperloopView.java:49)\r\n[ERROR] : TiApplication: \tat hyperloop.InstanceProxy.createView(InstanceProxy.java:80)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:499)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:485)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:523)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:507)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:485)\r\n[ERROR] : TiApplication: \tat ti.modules.titanium.ui.widget.TiUIScrollableView$ViewPagerAdapter.instantiateItem(TiUIScrollableView.java:585)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:111)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1184)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1084)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager$3.run(ViewPager.java:267)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer$CallbackRecord.run(Choreographer.java:829)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer.doCallbacks(Choreographer.java:606)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer.doFrame(Choreographer.java:575)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:815)\r\n[ERROR] : TiApplication: \tat android.os.Handler.handleCallback(Handler.java:739)\r\n[ERROR] : TiApplication: \tat android.os.Handler.dispatchMessage(Handler.java:95)\r\n[ERROR] : TiApplication: \tat android.os.Looper.loop(Looper.java:145)\r\n[ERROR] : TiApplication: \tat android.app.ActivityThread.main(ActivityThread.java:6939)\r\n[ERROR] : TiApplication: \tat java.lang.reflect.Method.invoke(Native Method)\r\n[ERROR] : TiApplication: \tat java.lang.reflect.Method.invoke(Method.java:372)\r\n[ERROR] : TiApplication: \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)\r\n[ERROR] : TiApplication: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)\r\n[ERROR] : AndroidRuntime: FATAL EXCEPTION: main\r\n[ERROR] : AndroidRuntime: Process: de.omg.ozapp, PID: 15600\r\n[ERROR] : AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.appcelerator.kroll.KrollDict.containsKey(java.lang.Object)' on a null object reference\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.kroll.KrollProxy.hasProperty(KrollProxy.java:580)\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.titanium.view.TiUIView.setNativeView(TiUIView.java:339)\r\n[ERROR] : AndroidRuntime: \tat hyperloop.HyperloopView.(HyperloopView.java:49)\r\n[ERROR] : AndroidRuntime: \tat hyperloop.InstanceProxy.createView(InstanceProxy.java:80)\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:499)\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:485)\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:523)\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:507)\r\n[ERROR] : AndroidRuntime: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:485)\r\n[ERROR] : AndroidRuntime: \tat ti.modules.titanium.ui.widget.TiUIScrollableView$ViewPagerAdapter.instantiateItem(TiUIScrollableView.java:585)\r\n[ERROR] : AndroidRuntime: \tat android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:111)\r\n[ERROR] : AndroidRuntime: \tat android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002)\r\n[ERROR] : AndroidRuntime: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1184)\r\n[ERROR] : AndroidRuntime: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1084)\r\n[ERROR] : AndroidRuntime: \tat android.support.v4.view.ViewPager$3.run(ViewPager.java:267)\r\n[ERROR] : AndroidRuntime: \tat android.view.Choreographer$CallbackRecord.run(Choreographer.java:829)\r\n[ERROR] : AndroidRuntime: \tat android.view.Choreographer.doCallbacks(Choreographer.java:606)\r\n[ERROR] : AndroidRuntime: \tat android.view.Choreographer.doFrame(Choreographer.java:575)\r\n[ERROR] : AndroidRuntime: \tat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:815)\r\n[ERROR] : AndroidRuntime: \tat android.os.Handler.handleCallback(Handler.java:739)\r\n[ERROR] : AndroidRuntime: \tat android.os.Handler.dispatchMessage(Handler.java:95)\r\n[ERROR] : AndroidRuntime: \tat android.os.Looper.loop(Looper.java:145)\r\n[ERROR] : AndroidRuntime: \tat android.app.ActivityThread.main(ActivityThread.java:6939)\r\n[ERROR] : AndroidRuntime: \tat java.lang.reflect.Method.invoke(Native Method)\r\n[ERROR] : AndroidRuntime: \tat java.lang.reflect.Method.invoke(Method.java:372)\r\n[ERROR] : AndroidRuntime: \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)\r\n[ERROR] : AndroidRuntime: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)\r\n", "updateAuthor": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-11-02T08:39:01.000+0000", "updated": "2017-11-02T08:39:01.000+0000" }, { "id": "430000", "author": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "body": "The PR I've mentioned above is scheduled for 7.0.0 and not merged yet", "updateAuthor": { "name": "michael", "key": "michael", "displayName": "Michael Gangolf", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-11-02T09:54:49.000+0000", "updated": "2017-11-02T09:54:49.000+0000" }, { "id": "432836", "author": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "body": "No change in SDK 7.0.1:\r\n\r\n[ERROR] : TiApplication: (main) [30100,172427] Sending event: exception on thread: main msg:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object org.appcelerator.kroll.KrollDict.get(java.lang.Object)' on a null object reference; Titanium 7.0.1,2017/12/18 10:42,undefined\r\n[ERROR] : TiApplication: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object org.appcelerator.kroll.KrollDict.get(java.lang.Object)' on a null object reference\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.view.TiUIView.composeContentDescription(TiUIView.java:2118)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.view.TiUIView.applyContentDescription(TiUIView.java:2092)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.view.TiUIView.applyAccessibilityProperties(TiUIView.java:2155)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.view.TiUIView.setNativeView(TiUIView.java:345)\r\n[ERROR] : TiApplication: \tat hyperloop.HyperloopView.(HyperloopView.java:49)\r\n[ERROR] : TiApplication: \tat hyperloop.InstanceProxy.createView(InstanceProxy.java:81)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:506)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:492)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:530)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:514)\r\n[ERROR] : TiApplication: \tat org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:492)\r\n[ERROR] : TiApplication: \tat ti.modules.titanium.ui.widget.TiUIScrollableView$ViewPagerAdapter.instantiateItem(TiUIScrollableView.java:585)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:111)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1184)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager.populate(ViewPager.java:1084)\r\n[ERROR] : TiApplication: \tat android.support.v4.view.ViewPager$3.run(ViewPager.java:267)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer$CallbackRecord.run(Choreographer.java:829)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer.doCallbacks(Choreographer.java:606)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer.doFrame(Choreographer.java:575)\r\n[ERROR] : TiApplication: \tat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:815)\r\n[ERROR] : TiApplication: \tat android.os.Handler.handleCallback(Handler.java:739)\r\n[ERROR] : TiApplication: \tat android.os.Handler.dispatchMessage(Handler.java:95)\r\n[ERROR] : TiApplication: \tat android.os.Looper.loop(Looper.java:145)\r\n[ERROR] : TiApplication: \tat android.app.ActivityThread.main(ActivityThread.java:6939)\r\n[ERROR] : TiApplication: \tat java.lang.reflect.Method.invoke(Native Method)\r\n[ERROR] : TiApplication: \tat java.lang.reflect.Method.invoke(Method.java:372)\r\n[ERROR] : TiApplication: \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)\r\n[ERROR] : TiApplication: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)\r\n\r\nThe app still crashes.\r\nIt would be really nice to see this fixed as the performance suffers heavily when this cache handling does not work and requires us to use a \"cache\" big enough to hold all data there might ever be…", "updateAuthor": { "name": "AppDev", "key": "appdev", "displayName": "AppDev", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-01-08T10:22:39.000+0000", "updated": "2018-01-08T10:25:42.000+0000" } ], "maxResults": 8, "total": 8, "startAt": 0 } } }