Google 方向 api zero_results 仅在 Android
Google directions api zero_results only on Android
我在 Android 中构建了一个简单的应用程序,我在其中使用 Google 地图方向 api。
在我的代码中,我发出了 Volley 请求并且它有效,但几乎总是响应 ZERO_RESULTS。
但是如果我复制 uri 的值并将其粘贴到浏览器中,它会响应一些结果。
这是我的代码
RequestQueue requestQueue = Volley.newRequestQueue(this);
String uri = null;
uri = "https://maps.googleapis.com/maps/api/directions/json?" +
"origin=" + partenza + "&" +
"destination=" + arrivo +
"&waypoints=optimize:true";
for(int i = 0; i<tappe.size();i++){
uri = uri.concat("|").concat(tappe.get(i));
}
uri = uri + "&key=" + getString(R.string.google_maps_key);
uri = Uri.parse(uri).buildUpon()
.build().toString();
JsonObjectRequest stringRequest = new JsonObjectRequest(
Request.Method.POST, uri, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject obj = new JSONObject(String.valueOf(response));
JSONArray cast = obj.getJSONArray("routes");
if(obj.getString("status").equals("ZERO_RESULTS")){
Toast.makeText(TragittoActivity.this, "Impossibile trovare soluzione", Toast.LENGTH_SHORT).show();
finish();
}
for (int i=0; i<cast.length(); i++) {
JSONObject news = cast.getJSONObject(i);
JSONArray legs = news.getJSONArray("legs");
for (int j=0; j<legs.length(); j++) {
String start = legs.getJSONObject(j).getString("start_address");
String end = legs.getJSONObject(j).getString("end_address");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VolleyError", error.toString());
}
}) {
};
requestQueue.add(stringRequest);
如何解决这个问题?
网络电话和 Android 电话之间有什么区别吗?
问题似乎与调用格式有关:
- 尝试解析 URI "manually"(例如使用
replace
函数将空格替换为“%20”)而不是使用 Uri.Parse
函数。
- 尝试将响应作为字符串而不是 JSON:不要使用
JsonObjectRequest
,而是使用 StringRequest
,然后将字符串转换为 JSONObject
- 由于您在 URL 中传递参数并且将方法参数设置为
null
,请尝试使用 GET
方法而不是 POST
我在 Android 中构建了一个简单的应用程序,我在其中使用 Google 地图方向 api。 在我的代码中,我发出了 Volley 请求并且它有效,但几乎总是响应 ZERO_RESULTS。 但是如果我复制 uri 的值并将其粘贴到浏览器中,它会响应一些结果。
这是我的代码
RequestQueue requestQueue = Volley.newRequestQueue(this);
String uri = null;
uri = "https://maps.googleapis.com/maps/api/directions/json?" +
"origin=" + partenza + "&" +
"destination=" + arrivo +
"&waypoints=optimize:true";
for(int i = 0; i<tappe.size();i++){
uri = uri.concat("|").concat(tappe.get(i));
}
uri = uri + "&key=" + getString(R.string.google_maps_key);
uri = Uri.parse(uri).buildUpon()
.build().toString();
JsonObjectRequest stringRequest = new JsonObjectRequest(
Request.Method.POST, uri, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject obj = new JSONObject(String.valueOf(response));
JSONArray cast = obj.getJSONArray("routes");
if(obj.getString("status").equals("ZERO_RESULTS")){
Toast.makeText(TragittoActivity.this, "Impossibile trovare soluzione", Toast.LENGTH_SHORT).show();
finish();
}
for (int i=0; i<cast.length(); i++) {
JSONObject news = cast.getJSONObject(i);
JSONArray legs = news.getJSONArray("legs");
for (int j=0; j<legs.length(); j++) {
String start = legs.getJSONObject(j).getString("start_address");
String end = legs.getJSONObject(j).getString("end_address");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VolleyError", error.toString());
}
}) {
};
requestQueue.add(stringRequest);
如何解决这个问题? 网络电话和 Android 电话之间有什么区别吗?
问题似乎与调用格式有关:
- 尝试解析 URI "manually"(例如使用
replace
函数将空格替换为“%20”)而不是使用Uri.Parse
函数。 - 尝试将响应作为字符串而不是 JSON:不要使用
JsonObjectRequest
,而是使用StringRequest
,然后将字符串转换为JSONObject
- 由于您在 URL 中传递参数并且将方法参数设置为
null
,请尝试使用GET
方法而不是POST