2012-04-16 12 views
6

त्रुटि के साथ HttpResponse पढ़ने पर नीचे दी गई विधि नीचे आती है: "सामग्री का उपभोग किया गया है"। मैं समझता हूं कि सामग्री केवल एक बार खाया जा सकता है लेकिन मुझे यह त्रुटि पहले प्रयास पर मिलती है और मुझे कोड में कहीं भी नहीं दिखाई देता है जहां मैं संभवतः इसे दो बार उपभोग कर रहा हूं।Android HttpResponse - सामग्री का उपभोग किया गया है

private static String getData(String url, HttpParams params) { 
    StringBuilder builder = new StringBuilder(); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     if (params != null) { 
      httpGet.setParams(params); 
     } 
     String result = ""; 
     try { 
      HttpResponse response = client.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        builder.append(line); 
       } 
       content.close(); 
       result = builder.toString(); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    return result; 
    } 
+0

क्या आप निश्चित रूप से कोड – jeet

+0

के इस ब्लॉक में अपवाद उत्पन्न कर रहे हैं आपकी प्रतिक्रिया इकाई पर 'isStreaming' को कॉल करने का क्या परिणाम है? – Perception

+0

विभिन्न ब्लॉक में कुछ लॉग डालें और जांचें कि क्या दो बार बुलाया जा रहा है या नहीं। अगर इससे मदद नहीं मिलती है, तो वह कोड प्रदान करें जहां आप इसे कॉल कर रहे हैं और लॉगकट भी। – Shubhayu

उत्तर

2

क्या यह एम्यूलेटर या आपके फोन पर है? यह एक एमुलेटर विशिष्ट समस्या हो सकती है। मैंने इसे अपने डिवाइस पर परीक्षण किया है, और यह पूरी तरह से काम करता है।

क्या आपके पास शायद एक डीबगर घड़ी है जो सामग्री का उपभोग कर सकती है?

+1

मैंने सब कुछ नवीनतम (एडीटी, एसडीके) में अपग्रेड कर दिया है और यह अभी भी मेरे फोन दोनों पर डीबग मोड और एम्यूलेटर पर समस्याएं देता है। – JBehrendt

+4

वह था - धन्यवाद! मुझे entity.getContent() पर एक घड़ी थी। घड़ी को हटा दिया और सबकुछ 100% काम कर रहा है। – JBehrendt

+1

मेरे पास एक ही मामला था, घड़ी पर सेट किया गया था .getcontent() घड़ी को हटाने से मेरी समस्या का समाधान हुआ। – UMAR

1

आपका डेटा प्राप्त करें() विधि सही है और यह ठीक काम कर रहा है मैंने पहले से ही इस कोड का उपयोग करने के लिए उपयोग किया है और यह मेरे लिए पूरी तरह से काम कर रहा है।

तो ऐसी संभावना है कि आपने इस विधि को दो बार बुलाया हो। यदि आप जांचना चाहते हैं कि मैं नीचे दिए गए कोड का उपयोग कर क्या कर रहा हूं तो मुझे परिणाम मिल जाएगा।

package com.sandeeppatel.httpget; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.StatusLine; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.app.Activity; 
import android.os.Bundle; 

public class HttpGetActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    StringBuilder builder = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet("http://www.vogella.com"); 
    /*if (params != null) { 
     httpGet.setParams(params); 
    }*/ 
    String result = ""; 
    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 
      } 
      content.close(); 
      result = builder.toString(); 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
// return result; 
} 
} 

और बस मैं केवल इंटरनेट अनुमति दे रहा हूं। फिर भी अगर आपको यह नहीं मिल रहा है तो मुझे अपना यूआरएल और पैराम दें।

+0

यही मैंने सोचा था। कोड सहकर्मियों पीसी पर 100% जुर्माना चलाता है लेकिन मेरे साथ यह मेरे एमुलेटर और मेरे फोन पर डीबग मोड में "सामग्री का उपभोग" देता है। मैंने एडीटी और एसडीके को बस सुनिश्चित करने के लिए अपग्रेड किया लेकिन इससे समस्या हल नहीं हुई। – JBehrendt

1

मुझे लगता है कि आपका कोड सही है। लेकिन HttpEntity से स्ट्रिंग तक पहुंचने के लिए इसे आजमाएं: स्ट्रिंग प्रतिक्रिया_स्ट्र = EntityUtils.toString (प्रतिक्रिया एंटीटी, HTTP.UTF_8);

की तरह मैं अपने विधि में इस्तेमाल किया:

public String SetObjectSecurity(String username, String password, 
     String clientName,String docRid,String ObjectRidsForCheckSum) throws JSONException, ClientProtocolException, IOException 
{ 
    String SetObjectSecurityURL = "url"; 
    StringEntity str_request_entity = null; 
    HttpResponse http_response = null; 

    HttpGet getrequest = new HttpGet(SetObjectSecurityURL); 
    postrequest.setHeader("Accept", "application/json"); 
    postrequest.setHeader("Content-type", "application/json"); 
//set param here 


    HttpClient httpClient = new DefaultHttpClient(); 

    http_response = httpClient.execute(getrequest); 

    //Log.e("Status code ",http_response); 
    HttpEntity responseEntity = http_response.getEntity(); 

    String response_str =EntityUtils.toString(responseEntity, HTTP.UTF_8); 
    Log.e("output",response_str); 
    int i = http_response.getStatusLine().getStatusCode(); 
    Log.e("status","code "+i); 


if(i==this){ 

do this} 
else 
{ 
this 
}  
     return response_str; 
     } 
2

यह इस के लिए आप इकाई एक बार से अधिक लेने वाली कर रहे हैं हो सकता है एक ऐसी ही कॉल में,:

EntityUtils.toString(entity, HTTP.UTF_8)) 
6

सुनिश्चित करें कि आप Eclipse घड़ी में कुछ नहीं है http_response.getEntity() यदि आप करते हैं, तो यह आपकी स्ट्रीम का उपभोग करता है ...

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