1、前提:
Arcgis for Android SDK版本:com.esri.arcgisruntime:arcgis-android:100.0.0
2、代码:
public void downloadData(String onlineFeatureLayerUrl){ createSyncTaskAndParameters(onlineFeatureLayerUrl); } void createSyncTaskAndParameters(String onlineFeatureLayerUrl) { geodatabaseSyncTask = new GeodatabaseSyncTask(onlineFeatureLayerUrl); // get the default parameters for generating a geodatabase Envelope syncGdbExtent = MapRootController.mMapView.getVisibleArea().getExtent(); final ListenableFuture<GenerateGeodatabaseParameters> paramsFuture = geodatabaseSyncTask.createDefaultGenerateGeodatabaseParametersAsync(syncGdbExtent); paramsFuture.addDoneListener(new Runnable() { @Override public void run() { try { String url = geodatabaseSyncTask.getUri(); // get default parameters GenerateGeodatabaseParameters generateGeodatabaseParameters = paramsFuture.get(); // make any changes required to the parameters, for example do not return attachments generateGeodatabaseParameters.setReturnAttachments(false); // optionally, specify the spatial reference of the geodatabase to be generated generateGeodatabaseParameters.setOutSpatialReference(MapRootController.mMapView.getMap().getSpatialReference()); // call a function to generate the geodatabase generateGeodatabase(generateGeodatabaseParameters); } catch (InterruptedException | ExecutionException e) { // dealWithException(e); e.printStackTrace(); } } }); } GeodatabaseSyncTask geodatabaseSyncTask; GenerateGeodatabaseJob generateJob; GenerateGeodatabaseParameters generateParams; Geodatabase geodatabase; SyncGeodatabaseParameters syncParams; SyncGeodatabaseJob syncJob; void generateGeodatabase(final GenerateGeodatabaseParameters parameters) { // create the generate geodatabase job, pass in the parameters and an output path for the local geodatabase final GenerateGeodatabaseJob generateGeodatabaseJob = geodatabaseSyncTask.generateGeodatabaseAsync(parameters, ArcgisEnvironment.getSingleton().getDatabase_dir()+ArcgisEnvironment.getSingleton().getDatabase_name()); // add a job changed listener to check the status of the job generateGeodatabaseJob.addJobChangedListener(new Runnable() { @Override public void run() { // for example, if the job is still running, report the last message to the user final List<Job.Message> messages = generateGeodatabaseJob.getMessages(); // updateUiWithProgress(messages.get(messages.size() - 1).getMessage()); } }); // add a job done listener to deal with job completion - success or failure generateGeodatabaseJob.addJobDoneListener(new Runnable() { @Override public void run() { if (generateGeodatabaseJob.getStatus() == Job.Status.FAILED) { // deal with job failure - check the error details on the job // dealWithJobDoneFailed(generateGeodatabaseJob.getError()); return; } else if (generateGeodatabaseJob.getStatus() == Job.Status.SUCCEEDED) { // if the job succeeded, the geodatabase is now available at the given local path. // add local data from the geodatabase to the map - see following section... // addGeodatabaseLayerToMap(); } } }); // start the job to generate and download the geodatabase generateGeodatabaseJob.start(); }
onlineFeatureLayerUrl:必须为Feature Server路径,并非是Feature Layer路径