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接口拿到的对应店铺IDfields:按需添加字段,比如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




