2014-03-28 41 views
0

我使用DefaultHttpClient從URL發出GET請求。 請參閱下面的代碼。StringBuilder不能附加字符串

,你可以看到,如果與Log.i("result", l),當循環完成登錄的結果,我可以看到響應, 的全面數據,但如果我用htmlResult = sb.toString();我不能得到或看到的所有數據,也許只有的一半響應。

這裏有什麼問題?感謝您的意見。

編輯:我貼我的代碼,每個人都可以幫助我:

public class DetailParser { 
    HTTPAsyncRequest _asyncRequest; 
    CompletionHandler _completion; 
    private String _currentURL; 
    private static DetailParser _instance; 
    public GadgetItem _currentItem; 
    static InputStream _inputStream = null; 

    public static DetailParser getInstance() 
    { 
     if(_instance == null) 
      _instance = new DetailParser(); 
     return _instance; 
    } 
    public class HTTPAsyncRequest extends AsyncTask<String, Integer, Response> 
    { 

     @Override 
     protected Response doInBackground(String... params) { 
      _currentURL = params[0]; 
      String result = getData(params[0]); 
      Response response = new Response(result, params[0]); 
      return response; 
     } 
     @Override 
     protected void onProgressUpdate(Integer... values) { 
      super.onProgressUpdate(values); 
     } 
     @Override 
     protected void onPostExecute(Response response) { 
      if(response == null) 
       return; 
      if(!_currentURL.equals(response.urlRequest)) 
      { 
       super.onPostExecute(response); 
      } 
      else 
      { 
       // TODO Auto-generated method stub 
       parseGadgetItem(response.xmlResult); 
       if(_completion != null) 
        _completion.getDescriptionDone(_currentItem); 
       super.onPostExecute(response); 
      } 
     } 
     public String getData(String url) 
     { 
private String _resultHTML = null; 
      StringBuilder builder = new StringBuilder(); 
      BufferedReader reader = null; 
      try { 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpGet httpPost = new HttpGet(url);  
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       _inputStream = httpEntity.getContent(); 
       reader = new BufferedReader(new InputStreamReader(_inputStream, "UTF-8"), 8); 
        StringBuilder sb = new StringBuilder(); 
        String l = ""; 
        String nl = System.getProperty("line.separator"); 
        while ((l = reader.readLine()) != null) { 
         sb.append(l + nl); 
//      Log.i("result", l); 
//      htmlResult += l + nl; 
        } 

        _resultHTML = sb.toString(); 
//     Log.i("Result", _resultHTML); 
//    htmlResult = EntityUtils.toString(httpEntity); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (Exception e) { 
        Log.e("GetMethodEx", e.getMessage()); 
       } 
      } 
      return _resultHTML; 
     } 
    } 
    // constructor 
    public DetailParser() { 

    } 

    private void abortRequest() 
    { 
     if(_asyncRequest != null) 
      _asyncRequest.cancel(true); 
    } 

    public void getGadgetDescription(GadgetItem item, final CompletionHandler completion) 
    { 
     _currentItem = item; 
     _completion = completion; 
     abortRequest(); 
     _asyncRequest = (HTTPAsyncRequest) new HTTPAsyncRequest().execute(item.gadget_link,null,null); 
    } 

    public void parseGadgetItem(String html) { 
// HERE : data is missing 
      if (xml == null) 
       return; 
      try { 
       Document doc = Jsoup.parse(html); 
       Elements e = doc.getElementsByClass("thecontent entry-content"); 

// 
      } catch (Exception e) { 
      } 
     } 
} 
+2

你好嗎? g來「查看」'htmlResult'?你沒有在代碼中的任何地方使用它。 –

+1

我將htmlResult值返回給另一個函數來解析數據,我也使用Log.i()來打印它,但不能滿。 –

+1

如果沒有演示您的問題的代碼示例,很難爲您提供幫助。你說你使用'Log.i()'來打印它,但你的例子沒有顯示。 –

回答

0

試試這個:

聲明這個全球

static InputStream re = null; 
private String result = null; 

現在,在你的類

使用此代碼
DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet(url); 

HttpResponse response1; 

try { 
    response1 = client.execute(httpGet); 
    Log.e("Refresh is: ", response1.toString()); 
    HttpEntity entity = response1.getEntity(); 

    re=entity.getContent(); 
    BufferedReader reader = new BufferedReader(
     new InputStreamReader(re, "UTF-8"), 8); 

    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    String result= sb.toString(); 
    System.out.println(result); 


} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+1

小心解釋爲什麼這段代碼更好? –

+0

特別是,靜態輸入流對我來說聽起來像一個*真的*壞主意...... –