2011-07-28 14 views
42

मैं नीचे दिए गए कोड का उपयोग करके स्ट्रिंग के लिए http प्रतिक्रिया को गुप्त करने की कोशिश कर रहा हूं, लेकिन मेरी प्रतिक्रिया स्ट्रिंग मध्य में किसी भी विचार को समाप्त कर रही है, स्ट्रिंग में http प्रतिक्रिया कैसे परिवर्तित करें ताकि मुझे कोई बफर समस्या न हो ।स्ट्रिंग एंड्रॉइड के लिए HttpResponse

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

कोई भी किसी भी सुझाव मदद करें। धन्यवाद दीपेश

+0

हाय, इसके अलावा समस्या बफर है नहीं कर सकते क्या समाधान होना चाहिए ताकि बड़े मूल्यों पकड़ .... – Max

उत्तर

109

मुझे लगता है कि, वहाँ एक आसान तरीका है?

+4

यह कन्वर्टस्ट्रीम टॉस्ट्रिंग * के लिए एक-पंक्ति प्रतिस्थापन है लेकिन * यह बफर का उपभोग करता है! इसका मतलब है कि आप इसे दो बार कॉल नहीं कर सकते (उदाहरण के लिए लॉग के लिए एक पंक्ति में और अगली में वास्तविक प्रसंस्करण करने के लिए)। उत्तरार्द्ध करने के लिए आपको पूर्व को टिप्पणी करना होगा। – denispyr

+0

@denispyr आपका क्या मतलब है? क्या आप इसे समझा सकते हैं ? तुमने ऐसा कहां पढ़ा? – Nikhil

+0

@ निखिल मेरा मतलब है कि resp_entity अमान्य हो जाता है (खाली? मुझे अभी याद नहीं है)। मैंने इसे कहीं भी नहीं पढ़ा, जब मैंने वास्तविक प्रसंस्करण से पहले लॉग इन किया तो मैं उस पर दुर्घटनाग्रस्त हो गया। क्या कुछ बदल गया? – denispyr

24

जाओ इस तरह प्रतिक्रिया InputStream:

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

मैं इस किया था ... लेकिन मेरी प्रतिक्रिया के बाद से बड़े बफर है ऐसा नहीं है, मैंने इसे एक स्ट्रिंग में रखने की कोशिश की, फिर भी यह रैंडोमली को समाप्त कर रहा है ... कोई विचार – Max

+0

हम्म, क्या आप प्रतिक्रिया को विभाजित करने के लिए अपनी वेब सेवा को संशोधित कर सकते हैं? पेजिंग की तरह ही, पहले अनुरोध आइटम 1 - 50, फिर 51 - 100. – ayublin

+0

@ ऐबुलिन मैं ऐसा नहीं कर सकता ... क्योंकि मेरा अनुरोध एक प्लिस्ट है, मुझे एक बार में पूरी प्रतिक्रिया की आवश्यकता है, अगर मैं एपीआई प्रतिक्रिया तोड़ता हूं इसका समर्थन नहीं करेंगे। प्रतिक्रिया के रूप में डेटा के विशाल तारों को स्टोर करने के लिए कुछ तरीका होना चाहिए ??? – Max

6
HttpPost httppost; 
     DefaultHttpClient httpclient; 
     ResponseHandler <String> res=new BasicResponseHandler(); 
     List<NameValuePair> nameValuePairs; 
     String bytesSent; 

     httppost = new HttpPost(URL OF YOUR SITE); 
     HttpParams params = new BasicHttpParams(); 

     HttpProtocolParams.setContentCharset(params, "UTF-8"); 

     httpclient = new DefaultHttpClient(params); 
     nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("key1", value1)); 
     nameValuePairs.add(new BasicNameValuePair("key2", value2)); 
     nameValuePairs.add(new BasicNameValuePair("key3", value3)); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     bytesSent = httpclient.execute(httppost, res); 

यह HTTPPOST इस का उपयोग करने का कोड आप में एक प्रतिक्रिया प्राप्त कर सकते हैं:

httpResponse = client.execute(request); 
HttpEntity entity = httpResponse.getEntity(); 
InputStream is = entity.getContent(); 

इस विधि का प्रयास करें स्ट्रिंग।

String result = EntityUtils.toString(resp_entity); 

सही:

आप सर्वर से क्वेरी स्ट्रिंग पारित करने के लिए है तो आप उपयोग कर सकते हैं nameValuePairs

+1

HI, मैंने लगभग सभी विकल्पों का उपयोग किया है, मुझे पता चला है कि समस्या क्या मेरा बफर प्रतिक्रिया पकड़ने में सक्षम नहीं है और यह वास्तव में एक बड़ी स्ट्रिंग भी नहीं है ... मुझे नहीं लगता कि यह हो रहा है y यह एक आईफोन ऐप भी लिखा है जो कोई समस्या नहीं देता है ... – Max

+0

यदि आपकी प्रतिक्रिया बहुत है बड़ा तो आपको इसे स्ट्रिंग – Dharmendra

+0

@djrecker में संग्रहीत करने के बजाय सीधे इनपुट स्ट्रीम पढ़नी चाहिए - क्या आपको कभी यह हल हो गया था? मुझे एंड्रॉइड पर एक ही समस्या है लेकिन आईफोन नहीं। आप के समान ही मुद्दा। क्या आपने कभी एंड्रॉइड के लिए पूरी प्रतिक्रिया प्राप्त करने के लिए क्या करना है? – Patricia

3

आप देख रहे हैं यह है कि एन्कोडिंग संभालती है और प्रतिक्रियाओं gzipped करने का एक और अधिक मजबूत तरीका के लिए, इस प्रयास करें:

String encoding = EntityUtils.getContentCharSet(response.getEntity()); 
encoding = encoding == null ? "UTF-8" : encoding; 
InputStream stream = AndroidHttpClient.getUngzippedContent(response.getEntity()); 
InputStreamEntity unzEntity = new InputStreamEntity(stream,-1); 
String response = EntityUtils.toString(unzEntity, encoding); 
+0

काम किया, अच्छा समाधान – Munir

-1

यदि आप इसके बजाय HttpResponse की प्रतिक्रिया है। आप इस तरह से स्टेटस कोड प्राप्त कर सकते हैं। धन्यवाद

final int statusCode = response.code(); 
0

कोई भी इसे आजमा सकता है। मैंने इसका परीक्षण किया है और यह ठीक से चल रहा है।

public String convertHttpResponseToString(HttpResponse res) { 
    InputStream is=null; 
    String responseString=""; 
    try { 
     is=res.getEntity().getContent(); 
     BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is)); 
     String line=""; 
     StringBuffer sb=new StringBuffer(); 
     while ((line=bufferedReader.readLine())!=null) 
     { 
     sb.append(line); 
     } 
     responseString=sb.toString(); 
    } catch (Exception e) 
    { 
      // handle Exception here... 
    } 
    return responseString; 

} 
0
private String convertHttpResponseToString(HttpResponse response) throws IOException { 
InputStream responseStream = response.getEntity().getContent(); 
Scanner scanner = new Scanner(responseStream, "UTF-8"); 
String responseString = scanner.useDelimiter("\\Z").next(); 
scanner.close(); 
return responseString; 

}

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