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: Могу ли я сделать синхронный запрос с залпом?

Другие вопросы по тегам