JSON получить адрес по координатам
Я создаю приложение для 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 все время. Можете ли вы помочь мне, что не так с моим кодом?
1 ответ
Решение
С помощью JsonObjectRequest
с RequestQueue
является асинхронным механизмом - работа выполняется в фоновом режиме и onResponse
обратный вызов вызывается всякий раз, когда ответ готов.
Из-за этого очень вероятно, что вы вернетесь из своего метода до onResponse
вызывается, и так как address
не установлен заранее (что вы в любом случае показали), его значение будет null
,
Если вы хотите заблокировать ваш поток, пока запрос не будет завершен, и установите значение address
, вы должны использовать RequestFuture
: Могу ли я сделать синхронный запрос с залпом?