Convertir un inputtream en un valor de cadena en Java Android App
Estoy teniendo problemas con las funciones que estoy escribiendo. Estoy tratando de convertir un inputtream a un valor de cadena. He escrito dos funciones y estoy tratando de extraer el valor de la cadena, pero mi respuesta Log.e está devolviendo NULL. A continuación se muestra mi sintaxis. ¿Qué estoy haciendo mal? Gracias
public JSONArray GetCityDetails(String StateID) { @SuppressWarnings("deprecation") String url = "http://mywebsite.com/getCity.php?StateID="+URLEncoder.encode(StateID); HttpEntity httpEntity = null; try{ DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); httpEntity = httpResponse.getEntity(); } catch(ClientProtocolException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } JSONArray jsonArray = null; if(httpEntity !=null){ try{ InputStream entityResponse = httpEntity.getContent(); // not working String entityResponseAfterFunctionCall2 = readFully(entityResponse); // not working String entityResponseAfterFunctionCall3 = letsDoThisAgain(entityResponse); Log.e("Entity Response Dude: ", entityResponseAfterFunctionCall3); jsonArray = new JSONArray(entityResponseAfterFunctionCall3); } catch(JSONException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } return jsonArray; } public String readFully(InputStream entityResponse) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = 0; while ((length = entityResponse.read(buffer)) != -1) { baos.write(buffer, 0, length); } return baos.toString(); } public String letsDoThisAgain(InputStream entityResponse){ InputStreamReader is = new InputStreamReader(entityResponse); StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(is); try { String read = br.readLine(); while(read !=null){ sb.append(read); read = br.readLine(); } } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } }
- ¿Cuál es la manera más rápida de filtrar datos de ArrayList?
- Android Dex: la opción "--core-library" para suprimir este mensaje de error
- Botón "Atrás" en la barra de acción - Android. ¿Cómo ir "atrás"?
- comparar java epoch cadena con php epoch fecha
- ¿Tiene OpenStreetMap punto (fuente) a punto (destino) dirección uri para utilizar en Android?
- Java.lang.Throwable: addInArray en RecyclerView
- Grabación de vídeo de la aplicación Android cuando la pantalla está desactivada
- El detector de progreso de subida no se disparó (API de unidad de Google)
- Consulta sqlite de Android para que coincida con la columna que contiene el texto
- Android: convierte textView en una salida de registro
- Cómo iniciar la pantalla de inicio mediante programación en Android
- El método findFirst () del dominio devuelve null
- @IntDef anotación y devolver valor de otro código que no se puede anotar o cómo desactivar temporalmente la anotación de afectar el código?
if(inputStream != null) { BufferedReader br = null; StringBuilder sb = new StringBuilder(); String line; try { br = new BufferedReader(new InputStreamReader(inputStream)); while ((line = br.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } else { return ""; }
Su llamada readFully
utilizará la codificación de caracteres predeterminada de su sistema para transformar el búfer de bytes en String. Esto NO es lo que quieres que suceda.
Debe utilizar un conjunto de caracteres explícito en la llamada toString
. La codificación se especifica normalmente en el encabezado de solicitud HTTP.
Aquí hay un ejemplo de cómo convertir una cadena UTF-8
codificada
return baos.toString( "UTF-8" );
Su segundo problema, es que una vez que haya consumido el InputString en readFully
llamada, el letsDoThisAgain
no tendrá nada que leer, porque el InputStream estará en el EOF.
- El recuento de argumentos erróneo, la cadena de formato requiere 0, pero el formato de los suministros de llamada 1
- ¿Cómo iniciar la actividad de intentservice?