Android Async Http Obtener solicitud
Estoy tratando de implementar una clase httpClient que es un AsyncTask (de lo contrario me sale una excepción debido a tener una conexión en mi hilo principal). He intentado algo como esto:
private class execHttpAsync extends AsyncTask <String, String, HttpResponse> { public String resultString; @Override protected HttpResponse doInBackground(String... params) { String url = params[0]; HttpClient httpClient = new DefaultHttpClient(); HttpGet request = new HttpGet(url); request.setHeader("Content-Type", "text/xml"); HttpResponse response; try { response = httpClient.execute(request); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return response; } @Override protected void onPostExecute(HttpResponse result) { StringBuffer returned = new StringBuffer(); InputStream content = result.getEntity().getContent(); BufferedReader rd = new BufferedReader(new InputStreamReader(content, "UTF-8")); String line; while ((line = rd.readLine()) != null) { String endOfLine = ""; returned.append(line + endOfLine); } content.close(); String retVal = returned.toString(); try { String header = retVal.substring(0, 1); if (!header.equals("<")) { retVal = retVal.replace(header, ""); } } catch (Exception e) { // TODO: handle exception } resultString = returned.toString(); } }
Pero necesito obtener la respuesta al final. He intentado instanciar esta clase y luego obtener la respuesta como un miembro, pero que no funcionó. Alguna sugerencia ?
- Extraer la URL de HttpPost Android
- Android sube video a un servidor remoto usando datos de formulario multipart HTTP
- Cómo correctamente mock HttpGet llamada en la prueba de Android
- Android OkHttp biblioteca: GET Solicitud - Excepción EOFException: \ n no encontrado: size = 0 content =
- ¿Cómo obtener la respuesta de cadena de Retrofit2?
- ¿Cómo puedo hacer que una aplicación de Android se comunique con un servidor web a través de Internet?
- ASIHTTPRequest equivalente para Android o cualquier gestor / envoltorio de solicitud HTTP?
- Cómo recuperar imágenes de la memoria caché en picasso?
- ¿Android no puede tener acceso a localhost?
- HttpGet maneja las cookies de forma automática?
- Uso de NanoHTTPD en Android
- ¿Puedo subir imágenes y texto usando UrlEncodedFormEntity para multipartes?
- Enviar datos binarios a través de POST en android
Intenta de esta manera
private class DownloadWebPageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String response = ""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { HttpResponse execute = client.execute(httpGet); InputStream content = execute.getEntity().getContent(); BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); String s = ""; while ((s = buffer.readLine()) != null) { response += s; } } catch (Exception e) { e.printStackTrace(); } } return response; } @Override protected void onPostExecute(String result) { textView.setText(result); } }
Esta es la operación asincrónica, por lo tanto cualquier cosa como:
myRetValue = new myAsyncTask.execute();
NO asignará el valor de retorno de onPostExecute()
a myRetValue. Tu
resultString = returned.toString();
Debe resultar en tener lo que returned.toString()
producido asignado a la variable resultString
(que supongo que se declara fuera de su clase AsyncTask, por lo que básicamente su código se ve bien a primera vista. Simplemente no puede tener nada en returned
. Su código AsyncTask e inspeccionar si realmente se comporta como usted piensa que lo hace.