{ "id": "171630", "key": "MOD-2421", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10034", "key": "MOD", "name": "Appcelerator Modules", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2018-05-08T21:28:15.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "ti.map" ], "versions": [], "issuelinks": [], "assignee": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "updated": "2018-05-09T11:35:51.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": [], "description": "From Git ticket: https://github.com/appcelerator-modules/ti.map/issues/229\r\n\r\n\r\nWhen using remote images for a marker, a java exception is thrown that seems like some sort of security issue. This doesn't seem to be present in pre-3.0 versions.\r\n\r\nHave tried this two different ways. The first is using an image view.\r\n\r\n{code}\r\nvar view = Ti.UI.createImageView(\r\n{\r\n width: 85,\r\n height: 85,\r\n itemId : itemId,\r\n\timage : image\r\n});\r\nvar ann = MapModule.createAnnotation({\r\n\tcustomView: view,\r\n\tlatitude: lat,\r\n\tlongitude: lon,\r\n\titemId: itemId,\r\n\tcanShowCallout: false\r\n});\r\n{code}\r\n\r\nAnd the second is a simple url added to the marker. \r\n\r\n{code}\r\nvar ann = MapModule.createAnnotation({\r\n\timage: \"https://someurl.com/images/someimage.jpg\",\r\n\tlatitude: lat,\r\n\tlongitude: lon,\r\n\titemId: itemId,\r\n\tcanShowCallout: false\r\n});\r\n{code}\r\n\r\nEither way, the result it the same. The following exception will be thrown.\r\n\r\n{code}\r\n[WARN] : W/System.err: android.os.NetworkOnMainThreadException\r\n[WARN] : W/System.err: \tat android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1317)\r\n[WARN] : W/System.err: \tat java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)\r\n[WARN] : W/System.err: \tat java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)\r\n[WARN] : W/System.err: \tat java.net.InetAddress.getAllByName(InetAddress.java:752)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)\r\n[WARN] : W/System.err: \tat com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243)\r\n[WARN] : W/System.err: \tat java.net.URL.openStream(URL.java:1057)\r\n[WARN] : W/System.err: \tat org.appcelerator.titanium.util.TiFileHelper.handleNetworkURL(TiFileHelper.java:248)\r\n[WARN] : W/System.err: \tat org.appcelerator.titanium.util.TiFileHelper.handleMessage(TiFileHelper.java:783)\r\n[WARN] : W/System.err: \tat android.os.Handler.dispatchMessage(Handler.java:98)\r\n[WARN] : W/System.err: \tat org.appcelerator.kroll.common.TiMessenger.sendMessage(TiMessenger.java:322)\r\n[WARN] : W/System.err: \tat org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:288)\r\n[WARN] : W/System.err: \tat org.appcelerator.kroll.common.TiMessenger.sendBlockingRuntimeMessage(TiMessenger.java:190)\r\n[WARN] : W/System.err: \tat org.appcelerator.titanium.util.TiFileHelper.openInputStream(TiFileHelper.java:183)\r\n[WARN] : W/System.err: \tat org.appcelerator.titanium.view.TiDrawableReference.getInputStream(TiDrawableReference.java:896)\r\n[WARN] : W/System.err: \tat org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:346)\r\n[WARN] : W/System.err: \tat org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:330)\r\n[WARN] : W/System.err: \tat ti.modules.titanium.ui.widget.TiUIImageView.toBlob(TiUIImageView.java:968)\r\n[WARN] : W/System.err: \tat ti.modules.titanium.ui.ImageViewProxy.toBlob(ImageViewProxy.java:117)\r\n[WARN] : W/System.err: \tat ti.modules.titanium.ui.ImageViewProxy.toImage(ImageViewProxy.java:46)\r\n[WARN] : W/System.err: \tat ti.map.AnnotationProxy.handleCustomView(AnnotationProxy.java:259)\r\n[WARN] : W/System.err: \tat ti.map.AnnotationProxy.processOptions(AnnotationProxy.java:236)\r\n[WARN] : W/System.err: \tat ti.map.TiUIMapView.addAnnotation(TiUIMapView.java:438)\r\n[WARN] : W/System.err: \tat ti.map.ViewProxy.handleAddAnnotation(ViewProxy.java:291)\r\n[WARN] : W/System.err: \tat ti.map.ViewProxy.addAnnotation(ViewProxy.java:280)\r\n[WARN] : W/System.err: \tat org.appcelerator.kroll.runtime.v8.V8Object.nativeCallProperty(Native Method)\r\n[WARN] : W/System.err: \tat org.appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:75)\r\n[WARN] : W/System.err: \tat org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1200)\r\n[WARN] : W/System.err: \tat android.os.Handler.dispatchMessage(Handler.java:98)\r\n[WARN] : W/System.err: \tat android.os.Looper.loop(Looper.java:154)\r\n[WARN] : W/System.err: \tat android.app.ActivityThread.main(ActivityThread.java:6123)\r\n[WARN] : W/System.err: \tat java.lang.reflect.Method.invoke(Native Method)\r\n[WARN] : W/System.err: \tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)\r\n[WARN] : W/System.err: \tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)\r\n{code}", "attachment": [], "flagged": false, "summary": "Ti.Map Android: Remote Marker Image throws exception", "creator": { "name": "topener", "key": "topener", "displayName": "Rene Pot", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "topener", "key": "topener", "displayName": "Rene Pot", "active": true, "timeZone": "Europe/Berlin" }, "environment": "Android", "comment": { "comments": [ { "id": "437477", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~topener], [~ybanev], this is a known issue that happens with all of our UI such as {{View.backgroundImage}}, except for {{ImageView.image}}. It only happens if Titanium's JavaScript runtime is setup to run on the UI thread, which unfortunately is the default setting. The reason is because our core image loading code is attempting to a blocking download, but Google's network API throws this exception while running on the UI thread.\r\n\r\nSo, the module doesn't need to be fixed. We need to fix it in our core code here...\r\n[TiFileHelper.java#handleNetworkURL()|https://github.com/appcelerator/titanium_mobile/blob/master/android/titanium/src/java/org/appcelerator/titanium/util/TiFileHelper.java#L232]\r\n\r\nI actually came up with a solution to this issue last year, but it was part of my giant PR that was intended to refactor all of our image loading code. This PR has been put on hold. But I can extract the needed fix out of it in the near future.\r\n\r\nNote that referencing an image via a URL is a blocking download on both Android and iOS for all APIs except {{ImageView.image}}. This is the downside of doing it this way and I don't really suggest using it for the moment. That is, the UI may block for 60 seconds until timing out if you have a network problem on iOS as well.\r\n(I think this is an undocumented gotcha.)", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-05-08T22:45:20.000+0000", "updated": "2018-05-08T22:45:20.000+0000" }, { "id": "437510", "author": { "name": "topener", "key": "topener", "displayName": "Rene Pot", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~jquick] sounds like something that could go into the first version after 7.2.0.GA", "updateAuthor": { "name": "topener", "key": "topener", "displayName": "Rene Pot", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-05-09T11:35:51.000+0000", "updated": "2018-05-09T11:35:51.000+0000" } ], "maxResults": 2, "total": 2, "startAt": 0 } } }