我想从我的Android应用程序访问openrouteservice API上的数据,尤其是地球上两个给定坐标之间的距离。 我已经发出请求,并从另一个API获得了可行的响应,该API使用此请求尝试执行的相同代码样式将两个给定地址转换为它们的latlong坐标。它工作正常,坐标到达,我可以进一步利用它们,没问题。
我的问题是我似乎错误地访问了API,因为如果我按如下所示记录URL并将其从“调试”窗口复制到浏览器中,它将发送请求,获取响应并将其显示在浏览器窗口中。 但是我的应用程序没有收到来自API的响应,因为从未执行过onResponse代码位,并且“获取完成”日志也从未出现在实际的调试日志中。 以下是我的代码设置,该代码使用Volley访问HTTP请求,并且对其他API正常工作。
@Override
protected String doInBackground(String... strings) {
Log.d("Run =>","Query 3");
String targetKoordURL = null;
String startKoordURL = null;
try {
startKoordURL = startK.getString("lon").concat(",").concat(startK.getString("lat"));
targetKoordURL = targetK.getString("lon").concat(",").concat(targetK.getString("lat"));
} catch (JSONException e) {
e.printStackTrace();
}
String URLfin = "https://api.openrouteservice.org/v2/directions/driving-car?api_key=5b3ce3597851110001cf624823e587e7a80c4c6ab02af6d394585213&start="+startKoordURL+"&end="+targetKoordURL;
Log.d("Debug =>", URLfin);
JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, URLfin, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
store = response;
Log.d("Run =>", "Fetch done!");
continueImp();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(error instanceof TimeoutError || error instanceof NoConnectionError){
sideFetcherHTTPRequestStart replace = new sideFetcherHTTPRequestStart();
replace.execute();
Log.d("VOLLEY_ERROR", "Retrying on Kilometer request");
}
error.printStackTrace();
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Accept", "application/json,application/geo+json,application/gpx+xml,img/png; charset=utf-8");
return params;
}
};
return null;
}
答案 0 :(得分:1)
您忘记将请求添加到请求队列中,请尝试执行以下操作:
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest req = new JsonObjectRequest(/*params*/);
//add above request to queue
queue.add(req);