Обратный вызов API геокодирования возвращает иногда ноль - PullRequest
0 голосов
/ 31 мая 2019

Я звоню в API обратного геокодирования Google, предоставляя широту, долготу и ключ API Google (у этого ключа еще нет ограничений для консоли), код ответа, который я получаю, равен 200, но иногда я получаю нулевые данные, вотподробное описание проблемы:

  1. Если я работаю в режиме отладки (отладочная истина в граде), размер списка ответов равен 10 с данными;следовательно, я могу получить значение place_id
  2. Если я работаю в режиме выпуска (отладка false), размер списка ответов по-прежнему равен 10, но все данные равны нулю, это означает значение place_idимеет значение null, также formatted_address имеет значение null.

Вызов API:

    public static void callGeocodeAPI() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://maps.googleapis.com/maps/api/")
                .addConverterFactory(GsonConverterFactory.create(getGsonInstance()))
                .build();
        APIservice requestInterface = retrofit.create(APIservice.class);
        Call<GeocodeResponse> call = requestInterface.getReverseGeocode(latitude + "," + longitude, GOOGLE_PLACE_API_KEY);

        APIHelper.enqueueWithRetry(call, new Callback<GeocodeResponse>() {
            @Override
            public void onResponse(Call<GeocodeResponse> call, Response<GeocodeResponse> response) {

                if (response != null && response.isSuccessful()) {
                    GeocodeResponse jsonResponse = response.body();
                    if (jsonResponse != null) {
                        ArrayList<GeocodeResult> geocodeResponses = jsonResponse.getGeocode_results_list();
                            if (jsonResponse.getGeocode_results_list().size() > 0) {
                                Log.d(TAG, "place_id: " + geocodeResponses.get(0).getPlace_id());
                                Log.d(TAG, "formatted_address: " + geocodeResponses.get(0).getFormatted_address());
                            }
                    }
                } else {
                }

            }

            @Override
            public void onFailure(Call<GeocodeResponse> call, Throwable t) {
                Log.d(TAG, "Failure");
            }
        });
        call.clone();
    }

В классе интерфейса:

    @GET("geocode/json")
    Call<GeocodeResponse> getReverseGeocode(@Query("latlng") String latlng,
                                        @Query("key") String API_KEY);

Контейнер ответа REST:

    public class GeocodeResponse {

        @SerializedName("results")
        @Expose
        private ArrayList<GeocodeResult> geocode_results_list;


        public ArrayList<GeocodeResult> getGeocode_results_list() {
            return geocode_results_list;
        }

        public void setGeocode_results_list(ArrayList<GeocodeResult> geocode_results_list) {
            this.geocode_results_list = geocode_results_list;
        }

    }

Класс GeocodeResult:

    public class GeocodeResult {

        private ArrayList<GeocodeAddress> address_components;
        private String formatted_address;
        private GeocodeGeometry geometry;
        private String place_id;
        private ArrayList<String> types;
        ...
    }

Примечание. Я отправляю менее 300 запросов в день.

Знаете ли вы, что я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...