AnsweredAssumed Answered

Help with downloading a map for offline use within an app?

Question asked by coracoleman14 on Apr 16, 2018

Hello, here is what my code in my onCreate method looks like now (I am following the code found on the Create an offline map guide page). I am using a button to begin the downloading process...I am confused because I do not find that the map is downloaded in the Downloads folder -- this code doesn't do anything but display my portal item:

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_offline);

    // inflate MapView from layout
    aMapView = (MapView) findViewById(R.id.mapView);

    // get the portal url for ArcGIS Online
    aPortal = new Portal(getResources().getString(R.string.portal_url));
    // get the pre-defined portal id and portal url
    aPortalItem = new PortalItem(aPortal, getResources().getString(R.string.webmap_glacier_national_park_id));
    // create a map from a PortalItem
    map = new ArcGISMap(aPortalItem);
    // set the map to be displayed in this view
    aMapView.setMap(map);
    Log.d("MAP SET", "we have set our map!");
final Button startdownload = (Button) findViewById(R.id.startdownload);
startdownload.setOnClickListener(v -> {   
// create an offline map task
        OfflineMapTask offlineMapTask = new OfflineMapTask(map);

        //get all of the preplanned map areas in the web map
        ListenableFuture<List<PreplannedMapArea>> mapAreasFuture = offlineMapTask.getPreplannedMapAreasAsync();
        mapAreasFuture.addDoneListener(() -> {
            try {
                // get the list of areas
                List<PreplannedMapArea> mapAreas = mapAreasFuture.get();

                // loop through the map areas
                for (PreplannedMapArea mapArea : mapAreas) {
                    // load each map area
                    mapArea.loadAsync();

                    // create the job
                    DownloadPreplannedOfflineMapJob downloadJob =
                            offlineMapTask.downloadPreplannedOfflineMap(mapArea, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString());

                    //start the job
                    downloadJob.start();

                    // listen for job complete
                    downloadJob.addJobDoneListener(() -> {
                        // get the download result
                        DownloadPreplannedOfflineMapResult downloadResult = downloadJob.getResult();

                        // check for errors
                        if (downloadResult.hasErrors()) {
                            // code here to examine errors:
                            Map<Layer, ArcGISRuntimeException> layerErrors = downloadResult.getLayerErrors();
                            Map<FeatureTable, ArcGISRuntimeException> tableErrors = downloadResult.getTableErrors();

                        } else {
                            // no errors so use the map straight away
                            map = downloadResult.getOfflineMap();

                        }
                    });

                    mapArea.addDoneLoadingListener(() -> {
                        // get the map area geometry so the is can used to display a graphic on the map
                        Geometry areaGeometry = mapArea.getAreaOfInterest();

                        // get the area title so it can be used in a UI component
                        String areaTitle = mapArea.getPortalItem().getTitle();

                        // UI code for showing map areas goes here:
                    });
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        });
    });
}

Outcomes