2011-05-14 2 views
2

Je suis en train de faire ce qui devrait être un simple post http qui inclut une chaîne json comme corps http.Réponse étrange après http POST avec JSON en Java

? enter image description here

Tout semble bon sauf la réponse elle-même - quand je le transforme en une chaîne, il revient étrange (pas de texte). Comment pourrais-je l'obtenir en texte brut? Ou qu'est-ce que j'ai fait de mal pendant le post pour obtenir cette réponse? (Note - si j'Excluez les biscuits pendant le POST, je reçois la version HTML brut à partir du serveur w/valide « accès refusé »)

code complet pour cette solution est inférieure à

public class BaseHttpService { 
    public ResponseAndCookies doHttpPostWithUrlWithJson(String url, String key, CookieStore cookies) { 
     try { 
      StringEntity se = new StringEntity("{\"filters\":true}"); 
      se.setContentType("text/xml"); 
      se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 

      HttpPost httpost = new HttpPost(url); 
      httpost.setEntity(se); 

      httpost.setHeader("Accept", "application/json"); 
      httpost.setHeader("Content-Type", "application/json"); 

      return executeHttpRequest(httpost, cookies); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    public ResponseAndCookies executeHttpRequest(HttpRequestBase http, CookieStore cookieStore) { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response; 
     String result = ""; 

     if (cookieStore != null) { 
      ((DefaultHttpClient) httpclient).setCookieStore(cookieStore); 
     } 

     try { 
      response = httpclient.execute(http); 

      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       InputStream instream = entity.getContent(); 
       result = convertStreamToString(instream); 
      } 

     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     List<Cookie> cookies = ((DefaultHttpClient) httpclient).getCookieStore().getCookies(); 
     CookieStore postCookieStore = ((DefaultHttpClient) httpclient).getCookieStore(); 

     ResponseAndCookies x = new ResponseAndCookies(); 
     x.setCookies(cookies); 
     x.setResponse(result); 
     x.setCookieStore(postCookieStore); 

     httpclient.getConnectionManager().shutdown(); 

     return x; 
    } 

    public static String convertStreamToString(InputStream is) { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 
} 
+1

Il s'agit principalement d'une supposition, mais cela peut résoudre la situation si vous définissez un codage pour [InputStreamReader] (http://developer.android.com/reference/java/io/InputStreamReader.html#InputStreamReader%28java.io). InputStream,% 20java.lang.String% 29) manuellement. Je ne connais pas la valeur exacte pour le faire, mais je ferais d'abord un essai à l'UTF-8. – harism

+0

étant explicite w/UTF-8 n'a pas semblé changer le résultat –

Répondre

0

Vous avez essayé lire une chaîne UTF-8 avec l'encodage de la plate-forme, il semble. Découvrez le codage de contenu pour la réponse renvoyée et utilisez-le pour convertir en chaîne. Faites-moi savoir si vous souhaitez remplacer le code ci-dessus par 2 lignes de code. J'ai un projet pour vous qui s'occupe déjà des cookies et de la conversion du contenu.

+0

toujours en place pour 2 lignes de code sur cette plaque de chaudière - hook me up :) (aussi si j'utilise httpfox pour trouver la réponse retournée et il montre la resp tapez comme "application/json" comment je vais le faire correctement (en tant que chaîne) merci! –

+0

'Resty r = nouveau Resty(); r.json (url, contenu (nouveau JSONObject (" {\ "filters \": \ "true \"})); 'Je suppose que l'objet de retour est json ici Il y a une branche Resty pour Android sur https://github.com/mravenel/Resty –

+1

L'API d'origine est à http: // beders.github.com/Resty/Resty/Overview.html (AVIS DE NON-RESPONSABILITÉ: Je suis l'auteur) Il devrait également soutenir automatiquement les cookies –