Emita las direcciones de streaming para Google Maps API v2 Android

Así que parte de mi aplicación genera una secuencia de instrucciones de navegación y luego intenta analizar el JSON y dibujar las rutas de polilínea en mi mapa. Primero construyo mi cadena usando variables de localización o constantes locales. Termino con algo así como

https://maps.googleapis.com/maps/api/directions/json?origin=Full Frame Documentary Film Festival, Durham, 27701&destination=601 W Peace St, Raleigh,27605&sensor=false&key={API_KEY} 
  • no hay ninguna nueva línea (lo agregué para la legibilidad) y la {API_KEY} es mi clave api real.

El problema que estoy corriendo es que cuando paso esa cadena URL a este método downloadUrl (String urlString)

 private String downloadUrl(String urlString) throws IOException { Log.d(TAG, "Downloaded string = " + urlString); String data = ""; InputStream stream = null; HttpURLConnection urlConnection = null; try { // Display our JSON in our browser (to show us how we need to implement our parser) Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(urlString)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); URL url = new URL(urlString); // Create a http connection to communicate with url urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); // read in our data stream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(stream)); StringBuffer sb = new StringBuffer(); // read in our data in, and append it as a single data string String line = ""; while ((line = br.readLine()) != null) { Log.d(TAG,"url download stream: " + line); sb.append(line); } data = sb.toString(); br.close(); } catch (Exception e) { e.printStackTrace(); } finally { Log.d(TAG, "Downloaded data = " + data); stream.close(); urlConnection.disconnect(); } return data; } 

el JSON se muestra en mi navegador correctamente, veo todo lo que Google lo describe en la documentación. Pero entonces en las líneas siguientes cuando intento abrir una conexión a la URL y tirar el JSON en una cadena para analizar, consigo la notificación de System.err

 05-02 09:56:01.540: W/System.err(32232): java.io.FileNotFoundException: https://maps.googleapis.com/maps/api/directions/json?origin=Full Frame Documentary Film Festival, Durham, 27701&destination=601 W Peace St, Raleigh, 27605&sensor=false&key={API_KEY} 

Supongo que mi confusión viene en el hecho de que el navegador muestra la dirección analizada a la perfección, pero luego la conexión a (lo que creo) es el mismo servidor devuelve un FNFE. ¿Me equivoco al suponer que este es el caso? Si es así mi clave realmente estar equivocado? Lo más confuso es que este código funciona en otra aplicación.

Hay que codificar URL de los parámetros, por ejemplo, un espacio ("") en una URL se escribe como "+". Su navegador hace esto internamente, probablemente sin mostrarle la URL enviada.

 static String urlEncode(String value) { try { return URLEncoder.encode(value, "UTF-8"); } catch (UnsupportedEncodingException e) { return value; } } 

Pero no codificar la URL completa, sólo los valores de los parámetros. Si los nombres de los parámetros no son ASCII, también tienen que ser codificados, pero las API de Google no utilizan dichos parámetros.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.