如何在 Android Studio 中实现 Google Distance/Matrix Api?

2024-03-28

我正在编写一个应用程序来计算路线中的两个位置。我已经实现了 google place API 来根据名称或地址获取纬度/经度,但我无法实现距离 API。当我尝试导入时,类/方法不会出现。下面是我正在尝试做的事情的一个例子。

    private static final String API_KEY = "YOUR_API_KEY";
    private static final GeoApiContext context = new 
    GeoApiContext().setApiKey(API_KEY);


    public DistanceMatrix estimateRouteTime(DateTime time, Boolean isForCalculateArrivalTime, DirectionsApi.RouteRestriction routeRestriction, LatLng departure, LatLng... arrivals) {
        try {
            DistanceMatrixApiRequest req = DistanceMatrixApi.newRequest(context);
            if (isForCalculateArrivalTime) {
                req.departureTime(time);
            } else {
                req.arrivalTime(time);
            }
            if (routeRestriction == null) {
                routeRestriction = DirectionsApi.RouteRestriction.TOLLS;
            }
            DistanceMatrix trix = req.origins(departure)
                    .destinations(arrivals)
                    .mode(TravelMode.DRIVING)
                    .avoid(routeRestriction)
                    .language("fr-FR")
                    .await();
            return trix;

        } catch (ApiException e) {
            System.out.println(e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return null;
    }

GeoApiContext 和 DistanceMatrix 在导入时不会出现。 谢谢帮助。


回答我的问题...

    public class GetJson extends AsyncTask<Void, Void, DeliveryData> {

    @Override
    protected void onPreExecute() {
        // progressDialog 
    }

    @Override
    protected DeliveryData doInBackground(Void... params) {
        Utils util = new Utils();
        DeliveryData json = util.getInfo("https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins="+latLngCompany.latitude+","+latLngCompany.longitude+
                "&destinations="+latPlace+","+lonPlace+"&key=" + APISERVERKEY);
        deliveryData.saveDeliveryData();

        return json;

    }

    @Override
    protected void onPostExecute(DeliveryData deliveryData) {
        //progressDialog.dismiss
    }
}

创建一个 AsyncTask 以使用 especifics 参数从 url 获取 json。

public class Utils {

public DeliveryData getInfo(String end){

    String json;
    DeliveryData output;
    json = NetworkUtils.getJSONFromAPI(end);
    output = parseJson(json);


    return output;
}

private DeliveryData parseJson(String json){
    try {
        DeliveryData deliveryData = new DeliveryData();

        JSONObject distanceJson = new JSONObject(json)
                .getJSONArray("rows")
                .getJSONObject(0)
                .getJSONArray("elements")
                .getJSONObject(0)
                .getJSONObject("distance");
        Double distanceDouble = null ;
        String distance = distanceJson.get("text").toString();
        if (distance.contains("km")){
            distanceDouble = Double.parseDouble(distance.replace("km", ""));

        }else {
            distanceDouble = Double.parseDouble("0." + distance.replace("m", ""));
        }

        deliveryData.setDistance(distanceDouble);

        return deliveryData;
    }catch (JSONException e){
        e.printStackTrace();
        return null;
    }
}

}

在 getInfo 处,来自 url 的数据被传递给 string。然后,调用parseJson将字符串转换为JsonObject。 我的 Json 只有一个位置。因此,在数组中选择对象,并将字符串解析为 Double,不包括字符。最后,距离被保存在对象处。

public class NetworkUtils {

public static String getJSONFromAPI (String url){
    String output = "";
        try {
            URL apiEnd = new URL(url);
            int responseCode;
            HttpURLConnection connection;
            InputStream is;

            connection = (HttpURLConnection) apiEnd.openConnection();
            connection.setRequestMethod("GET");
            connection.setReadTimeout(15000);
            connection.setConnectTimeout(15000);
            connection.connect();

            responseCode = connection.getResponseCode();
            if(responseCode < HttpURLConnection.HTTP_BAD_REQUEST){
                is = connection.getInputStream();
            }else {
                is = connection.getErrorStream();
            }

            output = convertISToString(is);
            is.close();
            connection.disconnect();

        }  catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    return output;
}

private static String convertISToString(InputStream is){
    StringBuffer buffer = new StringBuffer();

    try {

        BufferedReader br;
        String row;

        br = new BufferedReader(new InputStreamReader(is));
        while ((row = br.readLine())!= null){
            buffer.append(row);
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return buffer.toString();
}
}

该类负责连接到服务器并从 url 获取数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android Studio 中实现 Google Distance/Matrix Api? 的相关文章

  • 如何将H2数据库文件存储到项目目录中

    当我使用H2数据库时 数据库文件存储在C Users MyName TestDataBase db目录 H2路径是jdbc h2 TestDataBase 这是默认的 H2 数据库路径 是否有可能像这样将 H2 数据库文件存储到我的项目目录
  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 具有替代方案的重载方法值表

    我有编译器抱怨的以下代码 val state KTable String String builder table BARY PATH Materialized as PATH STORE 错误信息 error home developer
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • Android:Json 无法从 mysql 数据库检索任何文件,它是空的

    我是 android 新手 我正在使用 mysql 数据库 其中我链接 php 文件进行连接 工作正常 但我的代码没有显示任何内容 它只显示背景色黑色 而不是显示数据库中的数据 public class HomeFragment exten
  • Java 方法存根

    这就是我必须做的 为下面的 main 调用的方法定义存根 每个存根应打印 FIXME Finish methodName 后跟换行符 并应返回 1 输出示例 FIXME Finish getUserNum FIXME Finish getU
  • Java 文档生成器为 Xml 字符串返回 null 文档

    I have tried all possible answers https stackoverflow com questions 33098082 passing xml string as document returning nu
  • 在 IntelliJ IDEA 中哪里添加像 -ea 这样的编译器选项?

    我想添加 ea选项 我把它设置在Project Settings gt Compiler gt Java Compiler Additional command line parameters 但它导致了 make 错误 invalid f
  • Java HTTPS客户端证书认证

    我对HTTPS SSL TLS我对客户在使用证书进行身份验证时到底应该提供什么内容感到有点困惑 我正在编写一个 Java 客户端 需要执行一个简单的操作POST数据到特定的URL 这部分工作正常 唯一的问题是它应该重新完成HTTPS The
  • Java中使用流的byte[]到byte[]的ArrayList

    我有一个 byte 的 ArrayList 我想知道是否可以使用 Java 8 中的流将其转换为 byte ArrayList 内的所有数组都具有相同的大小 ArrayList
  • ZipInputStream.getNextEntry() 如何工作?

    假设我们有这样的代码 File file new File zip1 zip ZipInputStream zis new ZipInputStream new FileInputStream file 假设您有一个包含以下内容的 zip
  • 在idea ide中出现钻石运算符的编译错误

    我在尝试在idea ide中编译一些简单的源代码时收到此错误 java diamond operator is not supported in source 1 6 use source 7 or higher to enable dia
  • java中调用父构造函数

    我有两节课Parent and Child 而Parent有一个需要 3 个参数的构造函数 class Parent public Parent String host String path int port 现在我想要Child构造函数
  • 了解 Collection.isEmpty() 和 Collection.size() == 0 之间的区别? [复制]

    这个问题在这里已经有答案了 我读过很多关于两者之间差异的文章isEmpty and size gt 0 用于检查collection是否为空并发现isEmpty 表现超过size 但我无法轻易理解为什么性能isEmpty 即使 isEmpt
  • 连接空字符串来进行字符串转换真的那么糟糕吗?

    假设我有两个char变量 稍后我想将它们连接成一个字符串 我就是这样做的 char c1 c2 String s c1 c2 我见过有人说 trick 是 丑陋的 等等 你应该使用String valueOf or Character to
  • 通过JVMTI识别异常

    我正在使用 JVMTI 为 Java 应用程序编写一个检测工具 我已经看到 JVMTI 检测何时抛出异常以及何时捕获异常http docs oracle com javase 7 docs platform jvmti jvmti html
  • 从 Java 8 流中获取每个第 n 个元素

    假设我有一个这样的列表 1 2 3 4 5 6 7 8 9 10 是否可以使用 Java 8 流从该列表中获取每个第二个元素以获得以下内容 1 3 5 7 9 或者甚至可能是每三个元素 1 4 7 10 基本上 我正在寻找一个函数来获取流的
  • 添加 2 个 BigDecimal 值 [重复]

    这个问题在这里已经有答案了 class Point BigDecimal x BigDecimal y Point double px double py x new BigDecimal px y new BigDecimal py vo
  • 如何从 netbeans 远程调试 jar

    我正在尝试弄清楚如何调试远程运行的 jar 这是我的场景 我的 jar 将从 VPS 运行 这个jar基本上运行一个服务器 对于游戏 所以它还连接到 mysql 数据库 我使用 3 个 bat 文件启动服务器 如下所示 设置 CLASSPA
  • 为什么不建议将常量存储在单独的类中?

    有人告诉我 我在其他一些地方也看到过这种说法 不建议将常量存储在 Java 中的单独类中 以便在其他类中使用它们 但我没有看到任何地方为什么会这样 我不应该将它们存储在自己的接口 类中的原因是什么 我从 C 转到 Java 在 C 中我只想

随机推荐