Java DistanceMatrix API的回调函数

Java DistanceMatrix API的回调函数,java,google-maps,Java,Google Maps,我正在使用谷歌距离矩阵API来计算不同纬度之间的距离。我正在调用下面提到的相应API public void computeDistanceAndTime() { try { DistanceMatrixApiRequest req = DistanceMatrixApi.newRequest(Context.getContext()).origins(src) .destinat

我正在使用谷歌距离矩阵API来计算不同纬度之间的距离。我正在调用下面提到的相应API

public void computeDistanceAndTime() 
{    
        try 
        {
            DistanceMatrixApiRequest req =     DistanceMatrixApi.newRequest(Context.getContext()).origins(src)
                    .destinations(dst).mode(TravelMode.WALKING);
                DistanceMatrix matrix = req.await();
        }
        catch (OverQueryLimitException o) 
        {
            System.out.println(o.getMessage());
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
}
实际上,我想使用
setCallback
函数
DistanceMatrixApiRequest
设置回调。因此,我假设,如果捕获异常,回调将被调用,并且可以避免

com.google.maps.internal.okhttppendingreult重试

谷歌的例外。 现在我不知道如何像这样设置回调

  • 回电的签名是什么
  • 我们需要继承任何类来设置回调吗
  • 该函数的参数是什么
  • 我假设在调用wait函数之前需要调用,对吗
  • 我可以看到一个地理编码示例,如下所示

    req.setCallback(new PendingResult.Callback<GeocodingResult[]>() {
      @Override
      public void onResult(GeocodingResult[] result) {
        // Handle successful request.
      }
    
      @Override
      public void onFailure(Throwable e) {
        // Handle error.
      }
    });
    
    req.setCallback(新的pendingreult.Callback(){
    @凌驾
    public void onResult(GeocodingResult[]结果){
    //处理成功的请求。
    }
    @凌驾
    失败时的公共无效(可丢弃的e){
    //处理错误。
    }
    });
    
    即使我以类似的方式遵循距离矩阵,我也不会成功

     req.setCallback(new PendingResult.Callback<DistanceMatrix[]>() {
      @Override
      public void onResult(DistanceMatrix[] result) {
        // Handle successful request.
      }
    
      @Override
      public void onFailure(Throwable e) {
            System.out.println("There is a failure in Distance function");
      }
    });
    
    req.setCallback(新的pendingreult.Callback(){
    @凌驾
    public void onResult(距离矩阵[]结果){
    //处理成功的请求。
    }
    @凌驾
    失败时的公共无效(可丢弃的e){
    System.out.println(“距离函数出现故障”);
    }
    });
    
    下面是一个使用
    DistanceMatrixApi
    回调而不是
    wait()
    的示例。注意,由于OkHTTP调用后台线程上的回调,我需要使用一个
    CountDownLatch

    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.maps.DistanceMatrixApi;
    import com.google.maps.DistanceMatrixApiRequest;
    import com.google.maps.GeoApiContext;
    import com.google.maps.PendingResult;
    import com.google.maps.model.DistanceMatrix;
    
    import java.util.concurrent.CountDownLatch;
    
    public class DistanceMatrixApp {
      public static void main(String[] args) throws InterruptedException {
        GeoApiContext context = new GeoApiContext();
        context.setApiKey("[API KEY]");
        DistanceMatrixApiRequest req = DistanceMatrixApi.getDistanceMatrix(context,
        new String[]{"Sydney Town Hall"},
        new String[]{"Parramatta Station"});
    
        final CountDownLatch latch = new CountDownLatch(1);
        req.setCallback(new PendingResult.Callback<DistanceMatrix>() {
          @Override
          public void onResult(DistanceMatrix result) {
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            System.out.println(gson.toJson(result));
            latch.countDown();
          }
    
          @Override
          public void onFailure(Throwable e) {
            System.out.println("Exception thrown: "+e);
            latch.countDown();
          }
        });
    
        // We have to hold the main thread open until callback is called by OkHTTP.
        latch.await();
      }
    }
    
    import com.google.gson.gson;
    导入com.google.gson.GsonBuilder;
    导入com.google.maps.DistanceMatrixApi;
    导入com.google.maps.DistanceMatrixApiRequest;
    导入com.google.maps.GeoApiContext;
    导入com.google.maps.pendingreult;
    导入com.google.maps.model.distance矩阵;
    导入java.util.concurrent.CountDownLatch;
    公共类距离矩阵{
    公共静态void main(字符串[]args)引发InterruptedException{
    GeoApiContext context=新的GeoApiContext();
    context.setApiKey(“[API KEY]”);
    DistanceMatrixApiRequest请求=DistanceMatrixApi.getDistanceMatrix(上下文,
    新字符串[]{“悉尼市政厅”},
    新字符串[]{“Parramatta Station”});
    最终倒计时闩锁=新倒计时闩锁(1);
    req.setCallback(新的pendingreult.Callback(){
    @凌驾
    public void onResult(距离矩阵结果){
    Gson Gson=new GsonBuilder().setPrettyPrinting().create();
    System.out.println(gson.toJson(result));
    倒计时();
    }
    @凌驾
    失败时的公共无效(可丢弃的e){
    System.out.println(“抛出异常:”+e);
    倒计时();
    }
    });
    //我们必须保持主线程打开,直到OkHTTP调用回调。
    satch.wait();
    }
    }
    
    感谢Brett的详细解释。Brett,我在上面提到的类似行中编写了函数,但无法获得onFailure函数的回调。所以我使用OverQueryLimitException来捕获这个异常。