2015-03-15 1 views
0

Я пытаюсь получить объект JSON и проанализировать его, чтобы я мог получить соответствующие объекты LatLng между двумя точками на карте. До сих пор я реализовал тестовый класс, который выглядит примерно так:Получение вождения Направления и получение объекта JSON с использованием API Карт Google V2

/** 
* Necessary imports 
*/ 

public class DemoDirections extends AsyncTask<String, Void, Void > { 
    ArrayList<LatLng> latLngs; 
    JsonFactory JSON_FACTORY = new JsonFactory(); 
    JsonParser jParser; 

    public DemoDirections() { 
     //To access the Maps and Directions API for directions 
    } 

    protected Void doInBackground(String... src) { 

     String urlString = "http://maps.googleapis.com/maps/api/directions/json?" + 
       "origin=" + src[0] +"&destination="+ src[1] +"&sensor=false"; 
     Log.d("URL", urlString); 
     HttpURLConnection urlConnection = null; 
     URL url = null; 

     try { 

      url = new URL(urlString); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setRequestMethod("GET"); 
      urlConnection.setDoOutput(true); 
      urlConnection.setDoInput(true); 
      urlConnection.connect(); 
      jParser = JSON_FACTORY.createJsonParser(urlConnection.getInputStream()); 
      String test = jParser.nextTextValue() != null ? jParser.nextTextValue() : "its still null" ; 
      Log.d("test string: ", test); 

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

     return null; 
    } 

    protected void onPostExecute(String... src) 
    { 

    } 
} 

Я просто хотел, чтобы распечатать JSON в виде строки, просто чтобы убедиться, что я получил информацию правильно, прежде чем начать разбор через JSON вход, но вызов jParser.nextTextValue() или jParser.textValue() всегда возвращает значение null, что заставляет меня думать, что я не правильно устанавливаю службы Google API. Я просто хочу посмотреть, чего мне не хватает, чтобы получить вход JSON и проанализировать его, чтобы я мог настроить объекты LatLng.

+0

https://stackoverflow.com/questions/36246059/how-to-get-driving-alternative-routes-in-google-map-direction-api-v2/47328951#47328951 см. Этот вопрос! –

ответ

1

Похоже, что ваш url не предоставляет ключ api. Образец API требует URL должен быть таким: https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=API_KEY

Sample рабочий код:

String API_KEY = "YOUR_API_KEY_STRING"; 
String input = "1600+Amphitheatre+Parkway,+Mountain+View,+CA"; 

private static boolean getAddressResult(String input, StringBuilder jsonResults) { 
    try { 

     URL requestUrl = new URL("https://maps.googleapis.com/maps/api/geocode/json?address=" + input " + &key=" + API_KEY; 
      ); 
     HttpURLConnection connection = (HttpURLConnection)requestUrl.openConnection(); 
     connection.setRequestMethod("GET"); 
     connection.connect(); 


     responseCode = connection.getResponseCode(); 
     if (responseCode == HttpURLConnection.HTTP_OK) { 

      BufferedReader reader = null; 

      InputStream inputStream = connection.getInputStream(); 
      StringBuffer buffer = new StringBuffer(); 
      if (inputStream == null) { 
       // Nothing to do. 
       return false; 
      } 
      reader = new BufferedReader(new InputStreamReader(inputStream)); 

      String line; 
      while ((line = reader.readLine()) != null) { 
       long elapsedTime = System.currentTimeMillis(); 
       if(elapsedTime-currentTime>=5000) { 
        return false; 
       } 
       buffer.append(line + "\n"); 
      } 

      if (buffer.length() == 0) { 
       return false; 
      } 

      Log.d("Test", buffer.toString()); 
      return buffer.toString(); 
     } 
     else { 
      Log.i(TAG, "Unsuccessful HTTP Response Code: " + responseCode); 
      return false 
     } 
    } catch (MalformedURLException e) { 
     Log.e(LOG_TAG, "Error processing Places API URL", e); 
     return false; 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "Error connecting to Places API", e); 
     return false; 
    } catch (Expcetion e) { 
     return false; 
    } 
    return false; 
} 

И, пожалуйста, убедитесь, что вы должны исправить разрешения (например, Интернет), установленные в вашем файле манифеста. Вы также можете убедиться, что интернет на вашем устройстве действительно подключен.

+0

Большое вам спасибо. Моя проблема заключалась не в том, что у меня был ключ, у меня была проблема с тем, как я интерпретировал ввод. Вместо синтаксического анализа и добавления его как строки, как вы делаете, я просто пытался автоматически получить вход как объект JSON. –

Смежные вопросы