steph29 Posté(e) 11 décembre 2010 Share Posté(e) 11 décembre 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; } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph29 Posté(e) 11 décembre 2010 Auteur Share Posté(e) 11 décembre 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(); } } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph29 Posté(e) 11 décembre 2010 Auteur Share Posté(e) 11 décembre 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; } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
hocinao Posté(e) 23 février 2011 Share Posté(e) 23 février 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 ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
NewPratique Posté(e) 25 février 2011 Share Posté(e) 25 février 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.