Google указания api zero_results только на Android - PullRequest
0 голосов
/ 10 ноября 2018

Я создал простое приложение для Android, в котором я использую API Карт Google. В моем коде я делаю запрос залпа, и он работает, но почти всегда это ответ ZERO_RESULTS. Но если я скопирую значение URI и вставлю его в браузер, он получит некоторый результат.

Вот мой код

RequestQueue requestQueue = Volley.newRequestQueue(this);
    String uri = null;
    uri = "https://maps.googleapis.com/maps/api/directions/json?" +
            "origin=" + partenza + "&" +
            "destination=" + arrivo +
            "&waypoints=optimize:true";


    for(int i = 0; i<tappe.size();i++){
        uri = uri.concat("|").concat(tappe.get(i));
    }


    uri = uri + "&key=" + getString(R.string.google_maps_key);
    uri = Uri.parse(uri).buildUpon()
            .build().toString();


    JsonObjectRequest stringRequest = new JsonObjectRequest(
            Request.Method.POST, uri, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONObject obj = new JSONObject(String.valueOf(response));
                JSONArray cast = obj.getJSONArray("routes");
                if(obj.getString("status").equals("ZERO_RESULTS")){
                    Toast.makeText(TragittoActivity.this, "Impossibile trovare soluzione", Toast.LENGTH_SHORT).show();
                    finish();
                }
                for (int i=0; i<cast.length(); i++) {
                    JSONObject news = cast.getJSONObject(i);
                    JSONArray legs = news.getJSONArray("legs");

                    for (int j=0; j<legs.length(); j++) {
                        String start = legs.getJSONObject(j).getString("start_address");
                        String end = legs.getJSONObject(j).getString("end_address");

                    }

                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VolleyError", error.toString());
        }

    }) {

    };
    requestQueue.add(stringRequest);

Как я могу решить эту проблему? Есть ли какие-либо различия между веб-вызовом и вызовом Android?

1 Ответ

0 голосов
/ 10 ноября 2018

Проблема связана с форматом вызова:

  1. Попробуйте выполнить синтаксический анализ URI «вручную» (например, заменив пробелы на «% 20» с помощью функции replace) вместо использования функции Uri.Parse.
  2. Попробуйте получить ответ в виде строки вместо JSON: вместо JsonObjectRequest используйте StringRequest, а затем преобразуйте строку в JSONObject
  3. Поскольку вы передаете параметры в URL и устанавливаете параметры метода на null, попробуйте использовать метод GET вместо POST
...