HELLO,
I published the service using ArcGIS Server,and load it success with JS API.
var layerss = new FeatureLayer({ url: "https://hbsyb.booway.com.cn/arcgis/rest/services/zjsxyd/sichuanxianjixingzhengqu/MapServer/0", outFields : ["*"], opacity : 0.5 });map.add(layerss);
bud when i want to load it with Android Runtime Sdk 100.5.0(FeatureLayer), it doesn't work.
What shall I do?
I have had some instances when the service hasn't loaded. I basically wasn't getting a response from the server and it timed out.
The code sample above could be made more robust by checking the load status of the feature layer.
featureLayer.loadAsync() featureLayer.addDoneLoadingListener { //Toast.makeText(this, "loaded", 3) if (featureLayer.loadStatus == LoadStatus.FAILED_TO_LOAD) { Toast.makeText(this, "failed to load " + featureLayer.loadError.message, Toast.LENGTH_SHORT).show() } else { Toast.makeText(this, "loaded okay", Toast.LENGTH_SHORT).show() val extent: Envelope = featureLayer.getFullExtent() mapView.setViewpointGeometryAsync(extent) } }
The screenshot in my previous post was grabbed from running it in a desktop Java Runtime app which was for convenience.
I does however work on in my Kotlin Android app too. This is the modified onCreate method from my app:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // create the service feature table val serviceFeatureTable = ServiceFeatureTable("https://hbsyb.booway.com.cn/arcgis/rest/services/zjsxyd/sichuanxianjixingzhengqu/MapServer/0"); // create the feature layer using the service feature table val featureLayer = FeatureLayer(serviceFeatureTable) // create a map with the terrain with labels basemap ArcGISMap(Basemap.createTerrainWithLabels()).let { map -> // set an initial viewpoint //map.initialViewpoint = Viewpoint( // Point( // -13176752.0, // 4090404.0, // SpatialReferences.getWebMercator() // ), 500000.0 //) // add the feature layer to the map map.operationalLayers.add(featureLayer) featureLayer.loadAsync() featureLayer.addDoneLoadingListener { val extent: Envelope = featureLayer.getFullExtent() mapView.setViewpointGeometryAsync(extent) } // set the map to be displayed in the mapview mapView.map = map } }
This zooms to the extent of the layer once it is loaded and on my Samsung phone looks like this:
If you use my code, does this work for you?
Hey, MarkBaird. Please tell me if your screenshot is a mobile phone screenshot?
Thank you. It helped me a lot.
I found out the problem is that for the sake of security, Google has explicitly prohibited the amount of HTTP protocol on Android P, so I set it the "android: networkSecurityConfig" in my code. Therefore, I successfully loaded the layer(https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy/Geology/MapServer/9) when I removed it.
However, what puzzles me is that i still couldn't load my service, even if i imported the app on GitHub and replaced my sdk version to 100.9.0.😔
Did to just replaced the service url in the sample's code?
Looking forward to hearing from you.
I've tried adding your feature later to a map using our latest release (100.9.0) and it displayed without any issues.
I was basically swapping your service into this app on github:
https://github.com/Esri/arcgis-runtime-samples-android/tree/master/kotlin/feature-layer-feature-service
I had to zoom to a different area, but I could see your data:
Does using this code help?
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.