2011-08-05 14 views
13

से संदेश निकाय निकालें ठीक है, मैंने एक दूरस्थ सर्वर से सफलतापूर्वक कनेक्ट किया है और HTTP/1.1 200 OK प्रतिक्रिया प्राप्त की है और प्रतिक्रिया HttpResponse ऑब्जेक्ट में पैक की गई है। अब मैं इसके जवाब में डेटा कैसे प्राप्त करूं, विशेष रूप से जेएसओएन जो सर्वर से भेजा गया था?HttpResponse

उत्तर

24

कुछ इस तरह: यहां नकल: How do I parse JSON from a Java HTTPResponse?

HttpResponse response; // some response object 
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
String json = reader.readLine(); 
JSONTokener tokener = new JSONTokener(json); 
JSONArray finalResult = new JSONArray(tokener); 
4

ठीक है, आप का शरीर getEntity() पर कॉल करके प्राप्त कर सकते हैं जो HttpEntity प्रकार का ऑब्जेक्ट देता है। फिर आप InputStream का उपभोग करना चाहते हैं जो HttpEntity की विधि से वापस आ गया है। मैं इसे इस तरह करना होगा:

public static String entityToString(HttpEntity entity) { 
    InputStream is = entity.getContent(); 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder str = new StringBuilder(); 

    String line = null; 
    try { 
    while ((line = bufferedReader.readLine()) != null) { 
     str.append(line + "\n"); 
    } 
    } catch (IOException e) { 
    throw new RuntimeException(e); 
    } finally { 
    try { 
     is.close(); 
    } catch (IOException e) { 
     //tough luck... 
    } 
    } 
    return str.toString(); 
} 
0

जब httpclient.execute()

ResponseHandler <String> resonseHandler = new BasicResponseHandler(); 
String response = httpclient.execute(httpget, resonseHandler); 
1

तुम भी उपयोग कर सकते हैं बुला एक BasicResponseHandler का प्रयोग करें EntityUtils

response = cl.execute(p); //cl is http client and p is the post request 

if(response.getStatusLine().getStatusCode()==200) 
{ 
    try 
    { 
     String resp_body = EntityUtils.toString(response.getEntity()); 
     Log.v("resp_body", resp_body.toString()); 
     JSONObject jsobj = new JSONObject(resp_body); 
    } 
    catch(Exception e) 
    { 

     Log.e("sometag",e.getMessage()); 
    } 
} 

पीएस: आपको मुख्य थ्रेड के अलावा, एक अलग थ्रेड में ऐसा करना पड़ सकता है, जैसे कि AsyncTask के doInBackground() में या मुख्य थ्रेड अपवाद पर नेटवर्क ऑपरेशन हो सकता है।

संबंधित मुद्दे