gpt4 book ai didi

java - DistanceMatrix API 的回调函数

转载 作者:行者123 更新时间:2023-11-30 08:40:19 25 4
gpt4 key购买 nike

我正在使用 Google Distance Matrix 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.OkHttpPendingResult retry

来自谷歌的异常(exception)。现在我不知道如何设置回调

  1. 回调的签名是什么?
  2. 我们是否需要继承任何类来设置回调
  3. 该函数的参数是什么?
  4. 我假设需要在调用 await 函数之前调用它,对吗?

我可以看到一个地理编码示例,如下所示,

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(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");
}
});

最佳答案

这里是一个使用 DistanceMatrixApi 和回调而不是 await() 的例子。请注意,由于 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();
}
}

关于java - DistanceMatrix API 的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35739880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com