2

J'utilise HttpURLConnection pour communiquer avec le service Web dans l'un de mes applications Android, GET méthode & paramètres sont soumis correctement, mais quand j'ai essayé de demander POST les paramètres POST ne sont pas soumis dans la demande. J'ai joint la méthode utilisée, s'il vous plaît me guider où je vais mal.Android - HttpURLConnection paramètres POST ne fonctionne pas

/* 
* Making service call 
* @url - url to make request 
* @method - http request method 
* @params - http request params 
* */ 
public String makeServiceCall(String request_url, int method, 
           Map<String,String> params) { 
    InputStream inputStream = null; 

    HttpURLConnection urlConnection = null; 

    Integer result = 0; 
    try { 
     URL url = new URL(request_url); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     //urlConnection.setRequestProperty("Content-Type", "application/xml"); 
     //urlConnection.setRequestProperty("Accept", "application/xml"); 
     urlConnection.setReadTimeout(10000); 
     urlConnection.setConnectTimeout(15000); 
     urlConnection.setDoInput(true); 
     urlConnection.setDoOutput(true); 
     if (method == GET) { 
      urlConnection.setRequestMethod("GET"); 
     } else if(method == POST) { 
      urlConnection.setRequestMethod("POST"); 
      String urlParameters = null; 
      for (Map.Entry<String, String> entry : params.entrySet()) { 
       System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
       if(urlParameters != null) 
       { 
        urlParameters += "&"; 
       } 
       urlParameters +=entry.getKey() +"="+ URLEncoder.encode(entry.getValue(), "UTF-8"); 
      } 
      Log.d(TAG, "urlParameters: "+urlParameters); 
      //Send request 
      OutputStream os = urlConnection.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(urlParameters); 
      writer.flush(); 
      writer.close(); 
     } 
     int statusCode = urlConnection.getResponseCode(); 
     if (statusCode == HttpsURLConnection.HTTP_OK) { 

      inputStream = new BufferedInputStream(urlConnection.getInputStream()); 

      response = convertInputStreamToString(inputStream); 


      result = 1; // Successful 

     } else { 
      result = 0; //"Failed to fetch data!"; 
     } 

    } catch (Exception e) { 
     Log.d(TAG, ""+e.getLocalizedMessage()); 
     e.printStackTrace(); 
    } 
    Log.d(TAG, ""+response); 
    return response; 

} 

Répondre

1

Changer votre logique de formation de urlParameters avec ci-dessous le code:

StringBuilder result = new StringBuilder(); 
try { 
    for (Map.Entry<String, String> param : params.entrySet()){ 
     if (result.toString().length() !=0) { 
      result.append("&"); 
     } 
     result.append(URLEncoder.encode(param.getKey(), "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(param.getValue(), "UTF-8")); 
    } 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} 

Dans votre code

urlParameters = null; 
urlParameters +=entry.getKey() +"="+ URLEncoder.encode(entry.getValue(), "UTF-8"); 

Va ajouter null chaîne au début de urlParameters. il est recommandé d'utiliser StringBuilder pour String concatenation en utilisant en boucle.

+0

Merci @Dhaval, il a résolu le problème ... –

+0

comment bout si les paramètres valeur contiennent des caractères '&' comme ça http://stackoverflow.com/questions/38418389/httpsurlconnection-and-volley-difference une suggestion? –

0

Essayez de fermer votre OutputStream et appelez httpURLConnection.connect() une fois que vous avez terminé votre écrivain:

... 
writer.flush(); 
writer.close(); 
os.close(); 
urlConnection.connect(); 
... 
+0

Essayé mais pas de différence. BufferedWriter writer = new BufferedWriter ( nouveau OutputStreamWriter (os, "UTF-8")); writer.write (urlParameters); writer.flush(); writer.close(); os.close(); urlConnection.connect(); –