Envío de una solicitud JSON HTTP POST desde Android
Estoy utilizando el código a continuación para enviar una solicitud HTTP POST que envía un objeto a un servicio de WCF. Esto funciona bien, pero ¿qué pasa si mi servicio WCF necesita también otros parámetros? ¿Cómo puedo enviarlos desde mi cliente Android?
Este es el código que he escrito hasta ahora:
- Diferentes formas de publicar valores json en Server
- Wcf progressive descargar
- Android post gzip
- No se puede conectar al servicio WCF en Android
- Consumir un servicio WCF localhost utilizando kSOAP2 en el emulador
StringBuilder sb = new StringBuilder(); String http = "http://android.schoolportal.gr/Service.svc/SaveValues"; HttpURLConnection urlConnection=null; try { URL url = new URL(http); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setDoOutput(true); urlConnection.setRequestMethod("POST"); urlConnection.setUseCaches(false); urlConnection.setConnectTimeout(10000); urlConnection.setReadTimeout(10000); urlConnection.setRequestProperty("Content-Type","application/json"); urlConnection.setRequestProperty("Host", "android.schoolportal.gr"); urlConnection.connect(); //Create JSONObject here JSONObject jsonParam = new JSONObject(); jsonParam.put("ID", "25"); jsonParam.put("description", "Real"); jsonParam.put("enable", "true"); OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream()); out.write(jsonParam.toString()); out.close(); int HttpResult =urlConnection.getResponseCode(); if(HttpResult ==HttpURLConnection.HTTP_OK){ BufferedReader br = new BufferedReader(new InputStreamReader( urlConnection.getInputStream(),"utf-8")); String line = null; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } br.close(); System.out.println(""+sb.toString()); }else{ System.out.println(urlConnection.getResponseMessage()); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(urlConnection!=null) urlConnection.disconnect(); }
- Error de acceso denegado con jQuery
- ¿Cómo hacer SSO basada en reclamaciones para aplicaciones Android e IPhone usando ADFS STS?
- Android - Https conexión a un servicio WCF de .NET da SSLException: "Ningún certificado de compañero"
- Publicar un servicio JSONArray en WCF desde android
- Saltos de línea con WCF, JSON y un cliente que no sea Windows
- Cómo llamar a un servicio WCF usando ksoap2 en android?
- Aplicación de Android que se conecta a un servicio web - no funciona
- Android Value ... de tipo java.lang.String no se puede convertir a JSONArray
Publicación de parámetros Uso de POST: –
URL url; URLConnection urlConn; DataOutputStream printout; DataInputStream input; url = new URL (getCodeBase().toString() + "env.tcgi"); urlConn = url.openConnection(); urlConn.setDoInput (true); urlConn.setDoOutput (true); urlConn.setUseCaches (false); urlConn.setRequestProperty("Content-Type","application/json"); urlConn.setRequestProperty("Host", "android.schoolportal.gr"); urlConn.connect(); //Create JSONObject here JSONObject jsonParam = new JSONObject(); jsonParam.put("ID", "25"); jsonParam.put("description", "Real"); jsonParam.put("enable", "true");
La parte que te perdiste es en el siguiente … es decir, como sigue ..
// Send POST output. printout = new DataOutputStream(urlConn.getOutputStream ()); printout.writeBytes(URLEncoder.encode(jsonParam.toString(),"UTF-8")); printout.flush (); printout.close ();
El resto de la cosa que usted puede hacerlo.
Probar algo como golpe:
SString otherParametersUrServiceNeed = "Company=acompany&Lng=test&MainPeriod=test&UserID=123&CourseDate=8:10:10"; String request = "http://android.schoolportal.gr/Service.svc/SaveValues"; URL url = new URL(request); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("charset", "utf-8"); connection.setRequestProperty("Content-Length", "" + Integer.toString(otherParametersUrServiceNeed.getBytes().length)); connection.setUseCaches (false); DataOutputStream wr = new DataOutputStream(connection.getOutputStream ()); wr.writeBytes(otherParametersUrServiceNeed); JSONObject jsonParam = new JSONObject(); jsonParam.put("ID", "25"); jsonParam.put("description", "Real"); jsonParam.put("enable", "true"); wr.writeBytes(jsonParam.toString()); wr.flush(); wr.close();
Referencias:
- http://www.xyzws.com/Javafaq/how-to-use-httpurlconnection-post-data-to-web-server/139
- Java – enviar parámetros HTTP a través del método POST fácilmente
- Realización de una solicitud HTTPS mediante Android Volley
- Proveedor de contenido INSTALL_FAILED_CONFLICTING_PROVIDER (instalación del proveedor de contenido como un apk independiente)