I am testing the sample code of ClosestFacilityTask| arcgis-android and I can not make it work. I'd appreciate your help. For example:
// create ClosestFacilityTask instances
  mClosestFacilityTask = new ClosestFacilityTask(context, "http://www.yourserver.com/arcgis/rest/services/NetworkAnalysis/CA/NAServer/Closest%20Facility");
  .....
 
  // get default parameters
  final ListenableFuture paramsFuture = sClosestFacilityTask.createDefaultParametersAsync(); (I guess it's a syntax error)
  paramsFeature.addDoneListener(new Runnable() {
    @Override
    public void run() {
      try {
        mClosestFacilityParameters = paramsFuture.get(); (Return Object [] when mClosestFacilityParameters is a ListenableFuture?) 
 
        // add your Facility
        List facilities = mClosestFacilityParameters.getFacilities(); (Cannot resolve method)
        facilities.add(new Facility(new Point(-13045663.744, 4039204.580, WEB_MERCATOR)));
 
        // add your Incident
        List incidents = mClosestFacilityParameters.getIncidents(); (Cannot resolve method)
        incidents.add(new Incident(new Point(-13052490.008, 4035542.739, WEB_MERCATOR)));
 
        // solve
        final ListenableFuture resultFuture = mClosestFacilityTask.solveClosestFacilityAsync(mClosestFacilityParameters);
        resultFuture.addDoneListener(new Runnable() {
          @Override
          public void run() {
            try {
              // get ClosestFacilityRoute by facility and incident indexes
              ClosestFacilityResult result = resultFuture.get(); (Gives an error because it requires a ClosestFacilityResult and get () returns an Object)
              mClosestFacilityRoute = result.getRoute(0, 0);
            } catch (Throwable e) {
              Log.e(e);
            }
          }
        });
      } catch (Throwable e) {
        Log.e(e);
      }
    }
  });
Thanks!!
private void closestFacilities() {
        mClosestFacilityTask = new ClosestFacilityTask(getApplicationContext(), "http://www.yourserver.com/arcgis/rest/services/NetworkAnalysis/CA/NAServer/Closest%20Facility");
        final SpatialReference WEB_MERCATOR = SpatialReferences.getWebMercator();
        // get default parameters
        final ListenableFuture<ClosestFacilityParameters> paramsFuture = mClosestFacilityTask.createDefaultParametersAsync();
        paramsFuture.addDoneListener(new Runnable() {
            @Override
            public void run() {
                try {
                    mClosestFacilityParameters = paramsFuture.get();
                    // add your Facility
                    List facilities = new ArrayList<Facility>();
                    facilities.add(new Facility(new Point(-13045663.744, 4039204.580, WEB_MERCATOR)));
                    mClosestFacilityParameters.setFacilities(facilities);
                    // add your Incident
                    List incidents = new ArrayList<Incident>();
                    incidents.add(new Incident(new Point(-13052490.008, 4035542.739, WEB_MERCATOR)));
                    mClosestFacilityParameters.setIncidents(incidents);
                    // solve
                    final ListenableFuture<ClosestFacilityResult> resultFuture = mClosestFacilityTask.solveClosestFacilityAsync(mClosestFacilityParameters);
                    resultFuture.addDoneListener(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                // get ClosestFacilityRoute by facility and incident indexes
                                ClosestFacilityResult result = resultFuture.get();
                                ClosestFacilityRoute mClosestFacilityRoute = result.getRoute(0, 0);
                            } catch (Throwable e) {
                                Log.e("Facility", e.toString());
                            }
                        }
                    });
                } catch (Throwable e) {
                    Log.e("Facility", e.toString());
                }
            }
        });
    }You will need to use your own network data service but this should be a more concise sample.
I hope this helps!
Thanks for the reply. It has helped me.
I have another question. I have tried to do the example on a ServiceFeatureLayer with several points.
I have replaced:
List facilities = new ArrayList<Facility>(); facilities.add(new Facility(new Point(-13045663.744, 4039204.580, WEB_MERCATOR))); mClosestFacilityParameters.setFacilities(facilities); by:
QueryParameters queryParams = new QueryParameters(); queryParams.setWhereClause("1=1"); queryParams.setReturnGeometry(true); mClosestFacilityParameters.setFacilities(serviceFeatureTableX, queryParams); When I do the method result.getRoute(0,0) returned NULL. Any ideas? Thanks!
Did you call :
serviceFeatureTableX.loadAsync()?
I believe the table may need to be loaded before you can query it (not 100% on that)
It's a little weird. When I make a query that returns one result there is no problem. But if in the where clause I put "1 = 1" to return all results is when it returns null in "result.getRoute(0,0)".
I have tried serviceFeatureTableX.loadAsync() but it does not solve my problem.
Anyway thanks a lot for your quick reply
Interesting...
When I get more time to test, I will return to this issue.
How many results are being returned from your query?