Android Google API距离矩阵,距离没有值
您好,我在日志中收到以下错误,我不知道问题出在哪里: (我添加了日志语句) 这是我的密码: 字符串距离=getDistance(currentlatitude、Current经度、Double.parseDouble(纬度)、Double.parseDouble(经度)) 然后Android Google API距离矩阵,距离没有值,android,json,google-maps,google-api,distance,Android,Json,Google Maps,Google Api,Distance,您好,我在日志中收到以下错误,我不知道问题出在哪里: (我添加了日志语句) 这是我的密码: 字符串距离=getDistance(currentlatitude、Current经度、Double.parseDouble(纬度)、Double.parseDouble(经度)) 然后 private String getDistance(Double lat1, Double lon1, double lat2, double lon2) { String getdistance = "";
private String getDistance(Double lat1, Double lon1, double lat2, double lon2) {
String getdistance = "";
String url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + Double.toString(lat1) + "," + Double.toString(lon1) + "&destinations=" + Double.toString(lat2) + "," + Double.toString(lon2) + "&mode=driving&language=en-EN&units=metric&key=somethinghere";
HttpGet httpGet = new HttpGet(url);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse;
try {
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
String line = EntityUtils.toString(httpEntity);
JSONObject rootObject = new JSONObject(line);
JSONArray rows = rootObject.getJSONArray("rows"); // Get all JSONArray rows
for (int i = 0; i < rows.length(); i++) { // Loop over each each row
Log.d("loop!", "rows");
JSONObject row = rows.getJSONObject(i); // Get row object
JSONArray elements = row.getJSONArray("elements"); // Get all elements for each row as an array
for (int j = 0; j < elements.length(); j++) { // Iterate each element in the elements array
Log.d("loop!", "elements");
JSONObject element = elements.getJSONObject(j); // Get the element object
JSONObject distance = element.getJSONObject("distance"); // Get distance sub object
getdistance = String.valueOf(distance.getInt("value")/1000);
}
}
} catch (JSONException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return getdistance;
}
private String getDistance(双lat1、双lon1、双lat2、双lon2){
字符串getdistance=“”;
字符串url=”https://maps.googleapis.com/maps/api/distancematrix/json?origins=“+Double.toString(lat1)+”,“+Double.toString(lon1)+”和destinations=“+Double.toString(lat2)+”,“+Double.toString(lon2)+”&mode=driving&language=en&en&units=metric&key=somethinghere”;
HttpGet HttpGet=新的HttpGet(url);
HttpClient HttpClient=新的DefaultHttpClient();
HttpResponse HttpResponse;
试一试{
httpResponse=httpClient.execute(httpGet);
HttpEntity HttpEntity=httpResponse.getEntity();
String line=EntityUtils.toString(httpEntity);
JSONObject rootObject=新的JSONObject(行);
JSONArray rows=rootObject.getJSONArray(“rows”);//获取所有JSONArray行
对于(inti=0;i
谢谢你的帮助 我发现了我的问题。我把我的log语句放到输入流结果中,发现我的原始地址(GPS坐标)是0,0。因此距离没有价值
try {
InputStream is = null;
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
jsonn = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(jsonn);
Log.d("results:", jsonn); //To See Results
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
JSONArray rowsArray = jObj.getJSONArray("rows");
JSONObject rows = rowsArray.getJSONObject(0);
//JSONArray rows = rootObject.getJSONArray("rows"); // Get all JSONArray rows
JSONArray elementsArray = rows.getJSONArray("elements"); // Get all elements for each row as an array
JSONObject newDisTimeOb = elementsArray.getJSONObject(0);
JSONObject distOb = newDisTimeOb.getJSONObject("distance");
getdistance = String.valueOf(distOb.getDouble("value") / 1000);
Log.d("Distance text&value :", distOb.getString("text") + getdistance);
}
当然,一定要在函数中添加一些日志语句,以确保它实际按照设计运行。我会测试我的http响应,确保它们是我想要的值。在我看来,嵌套for循环中的“return-getdistance”是造成问题的原因。确保你的逻辑没有错误。
try {
InputStream is = null;
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
jsonn = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(jsonn);
Log.d("results:", jsonn); //To See Results
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
JSONArray rowsArray = jObj.getJSONArray("rows");
JSONObject rows = rowsArray.getJSONObject(0);
//JSONArray rows = rootObject.getJSONArray("rows"); // Get all JSONArray rows
JSONArray elementsArray = rows.getJSONArray("elements"); // Get all elements for each row as an array
JSONObject newDisTimeOb = elementsArray.getJSONObject(0);
JSONObject distOb = newDisTimeOb.getJSONObject("distance");
getdistance = String.valueOf(distOb.getDouble("value") / 1000);
Log.d("Distance text&value :", distOb.getString("text") + getdistance);
}