Java DistanceMatrix API的回调函数
我正在使用谷歌距离矩阵API来计算不同纬度之间的距离。我正在调用下面提到的相应APIJava DistanceMatrix API的回调函数,java,google-maps,Java,Google Maps,我正在使用谷歌距离矩阵API来计算不同纬度之间的距离。我正在调用下面提到的相应API public void computeDistanceAndTime() { try { DistanceMatrixApiRequest req = DistanceMatrixApi.newRequest(Context.getContext()).origins(src) .destinat
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重试
谷歌的例外。
现在我不知道如何像这样设置回调
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来捕获这个异常。