You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用开发:获取周边披萨店place id后如何调用Google API获取详情?

获取披萨店详细信息的解决方案

嘿,你已经成功通过Nearby Search API拿到了店铺的place id,接下来要获取电话、评分这些详情,用Google Places的Place Details API就可以轻松搞定,我给你一步步说明:

1. 构造Place Details API请求URL

你需要把拿到的place_id作为参数传入,同时可以通过fields参数指定你需要的字段(避免返回冗余数据,提升效率),比如你要电话、评分、店铺名称的话,URL格式如下:

https://maps.googleapis.com/maps/api/place/details/json?place_id={你的PlaceId}&fields=formatted_phone_number,rating,name,vicinity&key={你的API_KEY}
  • place_id:替换成你从Nearby Search接口拿到的对应店铺ID
  • fields:按需添加字段,比如formatted_phone_number是电话,rating是评分,opening_hours是营业时间,你可以根据需求调整
  • key:替换成你的Google Maps API密钥

2. 用AsyncTask处理请求和解析

和你之前处理Nearby Search的逻辑类似,继续用AsyncTask来做异步网络请求和数据解析,示例代码如下:

public class PlaceDetailsTask extends AsyncTask<String, Void, HashMap<String, String>> {

    @Override
    protected HashMap<String, String> doInBackground(String... params) {
        String placeId = params[0];
        String apiKey = "你的API_KEY";
        String url = "https://maps.googleapis.com/maps/api/place/details/json?place_id=" + placeId + "&fields=formatted_phone_number,rating,name&key=" + apiKey;

        try {
            // 发起网络请求
            URL requestUrl = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();

            // 读取响应
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            connection.disconnect();

            // 解析JSON
            JSONObject jsonObject = new JSONObject(response.toString());
            JSONObject result = jsonObject.getJSONObject("result");
            
            HashMap<String, String> details = new HashMap<>();
            details.put("name", result.getString("name"));
            if (result.has("formatted_phone_number")) {
                details.put("phone", result.getString("formatted_phone_number"));
            }
            if (result.has("rating")) {
                details.put("rating", String.valueOf(result.getDouble("rating")));
            }

            return details;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    protected void onPostExecute(HashMap<String, String> details) {
        super.onPostExecute(details);
        if (details != null) {
            // 在这里更新UI,比如显示店铺名称、电话、评分
            String name = details.get("name");
            String phone = details.get("phone");
            String rating = details.get("rating");
            // 示例:textViewName.setText(name);
        } else {
            // 处理请求失败的情况,比如显示错误提示
        }
    }
}

3. 关键注意事项

  • 权限配置:确保在AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    
  • API启用:在Google Cloud控制台中,确保已经启用了Place Details API,否则请求会返回权限错误
  • 错误处理:要处理API返回的错误状态(比如OVER_QUERY_LIMIT表示请求超限,INVALID_REQUEST表示参数错误),可以在解析JSON时检查status字段
  • 效率优化:Place Details API一次只能查询一个place id,如果有多个店铺需要查询,要注意控制请求频率,避免触发API配额限制

内容的提问来源于stack exchange,提问作者Ggdw

火山引擎 最新活动