Aller au contenu

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

Lien vers le commentaire
Partager sur d’autres 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(); 
   } 
}

Lien vers le commentaire
Partager sur d’autres 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;
		}

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...