我为Android创建了一个应用程序,该应用程序保存GPS坐标并显示其地址。
我有一个功能:
public String getAddressByGpsCoordinates(String latlan) {
requestQueue = Volley.newRequestQueue(this);
String url= "http://maps.googleapis.com/maps/api/geocode/json?latlng="+latlan+"&sensor=true&key=(I have a correct key :))";
JsonObjectRequest request = new JsonObjectRequest(url,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
address = response.getJSONArray("results").getJSONObject(0).getString("formatted_address");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(request);
return address;
}
始终返回NULL。 您能帮我代码的问题吗?
答案 0 :(得分:0)
将JsonObjectRequest
与RequestQueue
一起使用是一种异步机制-工作在后台执行,只要响应准备就绪,就会调用onResponse
回调。
因此,很有可能您是在调用onResponse
之前从方法中返回的,并且由于address
并未预先设置(无论如何,您已经显示了),因此它的值将为null
。
如果要在请求完成之前阻塞线程并设置address
的值,则应使用RequestFuture
:Can I do a synchronous request with volley?