steph29 Posted December 11, 2010 Share Posted December 11, 2010 Bonjour tout le monde, Ca fait de nombreuses heures que je bloque sur un problème de POST d' un message JSON. J'ai essayé beaucoup de chose et lu un peu tout ce qui était dispo sur le net. Mon but est le suivant. Mon serveur fonctionne de la façon suivante : il récupère le json via : $_POST['params'] Mais cette variable reste toujours vide. C'est là le soucis! j'envoi donc mon objet de la façon ci dessous(j'en ai essayé beaucoup). Si quelqu'un à une idée? Parce que je suis certain que l'objet est bien constitué et est bien envoyé mais surement pas de la bonne façon. merci d'avance! public boolean doInscriptionRequest(String pMail, String pName, String pPwd) { Log.d("CommunityNotes", "MyHttpPost doInscriptionRequest url "+_URL); User lUserToInscr = new User(pMail, pName, pPwd); try { // Add your data String messageToSend = JsonParser.parseJsonForInscription(lUserToInscr); Log.d("CommunityNotes", "MyHttpPost doInscriptionRequest messageToSend "+ messageToSend); if(messageToSend.equals(null)) { //TODO ERROR return false; } List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("params", messageToSend)); //create HttpCLient HttpClient httpclient = new DefaultHttpClient(); //create and set the Post HttpPost request = new HttpPost(_URL); request.setHeader("Accept", "application/json"); request.setHeader("Content-type", "application/json"); request.setHeader("params", messageToSend); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairs); //set the json in the post //StringEntity se = new StringEntity //se.setContentType("application/json; charset=utf-8"); //se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8")); //s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); //request.setEntity(s); request.setEntity(formEntity); HttpParams myParams = new BasicHttpParams(); myParams.setParameter("params", messageToSend); //myParams.setParameter("params", nameValuePairs); HttpProtocolParams.setContentCharset(myParams, "application/json"); request.setParams(myParams); //execute post and get response HttpResponse response = httpclient.execute(request); BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); //parsing response StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (Exception e) { e.printStackTrace(); } Log.d("CommunityNotes", "doInscriptionRequest receive flow" + sb.toString()); if(sb.toString().contains("200")) { Log.d("CommunityNotes", "doInscriptionRequest OK"); //TODO get GroupList return true; } } catch (ClientProtocolException e) { Log.e("CommunityNotes","HttpPost doRequest ClientProtocolException "+e.getMessage()); } catch (Exception e) { Log.e("CommunityNotes","HttpPost doRequest ClientProtocolException "+e.getMessage()); } return false; } Quote Link to comment Share on other sites More sharing options...
steph29 Posted December 11, 2010 Author Share Posted December 11, 2010 Information supplémentaire, j'ai essayé le code suivant. Je pense vraiment que le problème vient du fait que je ne met pas le tout dans params, car le serveur attend vraiment quelque chose de type params=Json.tostring(); public static String JSONCall(String Url, JSONObject arg) { HttpPost httpost = null; try { DefaultHttpClient httpclient = new DefaultHttpClient(); httpost = new HttpPost(Url); StringEntity se = new StringEntity(arg.toString()); httpost.setEntity(se); httpost.setHeader("Accept", "application/json, text/javascript, */*"); httpost.setHeader("Content-type", "application/json; charset=utf-8"); HttpProtocolParams.setUseExpectContinue(httpclient.getParams(), false); BasicResponseHandler responseHandler = new BasicResponseHandler(); return httpclient.execute(httpost, responseHandler); } catch (Exception e) { return e.getMessage(); } } Quote Link to comment Share on other sites More sharing options...
steph29 Posted December 11, 2010 Author Share Posted December 11, 2010 Bon, après 2 jours de galère ça marche. Pour tous ceux qui sont dans mon cas, voici un code qui marche parfaitement :D Map<String, String> kvPairs = new HashMap<String, String>(); kvPairs.put("params", JsonParser.parseJsonForInscription(new User(pMail, pName, pPwd))); // Normally I would pass two more JSONObjects..... HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(_URL); if (kvPairs != null && kvPairs.isEmpty() == false) { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size()); String k, v; Iterator<String> itKeys = kvPairs.keySet().iterator(); while (itKeys.hasNext()) { k = itKeys.next(); v = kvPairs.get(k); nameValuePairs.add(new BasicNameValuePair(k, v)); } httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); } HttpResponse response; response = httpclient.execute(httppost); BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); //parsing response StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (Exception e) { e.printStackTrace(); } Log.d("test", "doInscr receive flow" + sb.toString()); if(sb.toString().contains("200")) { Log.d("test", "doInscr OK"); //TODO get GroupList return true; } Quote Link to comment Share on other sites More sharing options...
hocinao Posted February 23, 2011 Share Posted February 23, 2011 Bonjour , oui , la solution est de passer par un HashMap plutot , et d'envoyer les paramètres sous forme ObjetJson.toString() sa marche avec moi aussi :) bon courage ;) Quote Link to comment Share on other sites More sharing options...
NewPratique Posted February 25, 2011 Share Posted February 25, 2011 Bonjour Je voudrais creer un webservice pour interroger une BD SQLite entre Serveur/client Ton code est-il le moyen de procéder à cela Merci pour ta réponse Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.