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)
- InputStream de la carpeta de activos de Android devuelve vacío
- Cargar archivos de más de 1M de la carpeta de activos
- Cadena de resultados de Android HttpUrlConnection truncada
- Cómo leer bits extraíbles como InputStream
- ¿Cómo obtener el tamaño de los datos recibidos a través de EXTRA_STREAM en una aplicación que maneja la acción enviar intención?
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.
- Android Bluetooth Input / Outputstream: Enviado ~ 1400 bytes, recibido 1008
- El permiso de Android se deniega al guardar un archivo de un subproceso no perteneciente a la interfaz de usuario
- Cómo puedo obtener Inpustream como respuesta en Volley Library
- Error de HttpsURLConnectionImpl.getInputStream () en la plataforma Android
- Android AudioTrack que juega el archivo .wav, consiguiendo solamente el ruido blanco
- Java.io.FileNotFoundException: /file/path.jpg abierto fallido: ENOENT (No hay tal archivo o directorio)
- FileNotFoundException en la versión de Android> 2.3
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.