Google Direction API无法生成路线问题求助
谷歌地图API路线绘制首次正常,重启应用后失效无日志问题排查
我在集成谷歌地图API实现路线绘制功能时遇到了一个诡异的问题:首次创建API密钥并添加到应用后,路线可以正常绘制;但退出并重新进入应用后,路线完全无法绘制,而且日志没有任何错误或相关记录。我已经反复检查了代码,尝试了各种可能的调试方法,还是找不到问题所在,恳请大家帮忙分析!
我的核心实现代码如下:
public class DirectionFinder { private static final String DIRECTION_URL_API = "https://maps.googleapis.com/maps/api/directions/json?"; private static final String GOOGLE_API_KEY = "this is my key"; private DirectionFinderListener listener; private String origin; private String destination; public DirectionFinder(DirectionFinderListener listener, String origin, String destination) { this.listener = listener; this.origin = origin; this.destination = destination; } public void execute() throws UnsupportedEncodingException { listener.onDirectionFinderStart(); new DownloadRawData().execute(createUrl()); } private String createUrl() throws UnsupportedEncodingException { String urlOrigin = URLEncoder.encode(origin, "utf-8"); String urlDestination = URLEncoder.encode(destination, "utf-8"); return DIRECTION_URL_API + "origin=" + urlOrigin + "&destination=" + urlDestination + "&key=" + GOOGLE_API_KEY; } private class DownloadRawData extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { String link = params[0]; try { URL url = new URL(link); InputStream is = url.openConnection().getInputStream(); StringBuffer buffer = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { buffer.append(line + "\n"); } return buffer.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String res) { try { parseJSon(res); } catch (JSONException e) { e.printStackTrace(); } } } private void parseJSon(String data) throws JSONException { if (data == null) return; List<Route> routes = new ArrayList<Route>(); JSONObject jsonData = new JSONObject(data); JSONArray jsonRoutes = jsonData.getJSONArray("routes"); for (int i = 0; i < jsonRoutes.length(); i++) { JSONObject jsonRoute = jsonRoutes.getJSONObject(i); Route route = new Route(); JSONObject overview_polylineJson = jsonRoute.getJSONObject("overview_polyline"); JSONArray jsonLegs = jsonRoute.getJSONArray("legs"); JSONObject jsonLeg = jsonLegs.getJSONObject(0); JSONObject jsonDistance = jsonLeg.getJSONObject("distance"); JSONObject jsonDuration = jsonLeg.getJSONObject("duration"); JSONObject jsonEndLocation = jsonLeg.getJSONObject("end_location"); JSONObject jsonStartLocation = jsonLeg.getJSONObject("start_location"); route.distance = new Distance(jsonDistance.getString("text"), jsonDistance.getInt("value")); route.duration = new Duration(jsonDuration.getString("text"), jsonDuration.getInt("value")); route.endAddress = jsonLeg.getString("end_address"); route.startAddress = jsonLeg.getString("start_address"); route.startLocation = new LatLng(jsonStartLocation.getDouble("lat"), jsonStartLocation.getDouble("lng")); route.endLocation = new LatLng(jsonEndLocation.getDouble("lat"), jsonEndLocation.getDouble("lng")); route.points = decodePolyLine(overview_polylineJson.getString("points")); routes.add(route); } listener.onDirectionFinderSuccess(routes); } private List<LatLng> decodePolyLine(final String poly) { int len = poly.length(); int index = 0; List<LatLng> decoded = new ArrayList<LatLng>(); int lat = 0; int lng = 0; while (index < len) { int b; int shift = 0; int result = 0; do { b = poly.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = poly.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; decoded.add(new LatLng( lat / 100000d, lng / 100000d )); } return decoded; } }
我尝试过的操作
- 反复核对代码逻辑,确认路线解析、Polyline解码流程没有问题
- 重新创建API密钥并重新配置到应用中
- 检查应用的网络权限配置
期待的帮助
希望大家能帮我定位重启应用后路线无法绘制的根本原因,或者给出针对性的调试方向!
内容的提问来源于stack exchange,提问作者Денис Деркач
相关产品推荐
相关产品推荐

