网页的内容(缓冲区)不完整

时间:2012-03-08 11:50:12

标签: java android web webpage http-get

我想通过以下方法阅读网页内容,但我只能获得60-70%的内容。

我尝试了两种不同的方法来阅读网页,两者都有相同的结果。我也试过不同的网址。我没有错误或超时。

我做错了什么?

        URL url = new URL(uri.toString());
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try
    {
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = br.readLine()) != null) 
        {
            sb.append(line + "\n");
        }
        br.close();

        this.content = sb.toString();
    }      
    finally
    {
        urlConnection.disconnect();
    }

    HttpGet get = new HttpGet(uri);
    HttpClient defaultHttp = new DefaultHttpClient(httpParameters);
    HttpResponse response = defaultHttp.execute(get);

    StatusLine status = response.getStatusLine();
    if(status.getStatusCode() == HttpStatus.SC_OK)
    {
        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
            String encoding = "utf-8";      

        //long length = entity.getContentLength();
        //if(entity.getContentEncoding() != null)
        //{
        //  encoding = entity.getContentEncoding().getValue();
        //}
        //if(length > 0)
        //{
            byte[] buffer = new byte[1024];
            long read = 0;
            do
            {
                read = stream.read(buffer);
                if(read > 0)
                {
                    this.content += new String(buffer, encoding);
                }
            }while(read > 0);

        //}
    }

@edit

我用C#和WinForms尝试过。我阅读了该网页的完整html源代码。 使用java-android它不起作用。

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.kicker.de");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string content = reader.ReadToEnd();


        reader.Close();
        response.Close();

2 个答案:

答案 0 :(得分:0)

apache的util jar中的httpurlconnection限制了响应中的最大字节,我记不起它的数量了。

但是在大​​多数时候,你可能在UI线程中使用http conncetion,所以有时它不安全,也许会被杀死,你可以选择在线程中处理http请求而不是UI线程。所以我想知道你是否在UT线程中这样做

答案 1 :(得分:0)

我目前有同样的问题。我在一个简单的Java应用程序中尝试了我的代码,并收到了整个内容。但在Android上,内容不完整。这个问题现在已经有一年了。我猜你在此期间解决了它。你能加入你的解决方案吗?

修改: 我将内容写入Android设备上的文件中。内容已经完成! 似乎logcat没有显示你从Devie收到的完整输出。