Jump to content

JSON & POST


steph29

Recommended Posts

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;
}

Link to comment
Share on other sites

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(); 
   } 
}

Link to comment
Share on other sites

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;
		}

Link to comment
Share on other sites

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...