0

我正在做我的第一个 Android 应用程序,我必须获取 html 页面的代码。

实际上我正在这样做:

    private class NetworkOperation extends AsyncTask<Void, Void, String > {
    protected String doInBackground(Void... params) {
        try {
            URL oracle = new URL("http://www.nationalleague.ch/NL/fr/");
            URLConnection yc = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
            String inputLine;
            String s1 = "";
            while ((inputLine = in.readLine()) != null)
                s1 = s1 + inputLine;
            in.close();


            //return
            return s1;
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

但问题是它需要太多时间。如何以从第 200 行到第 300 行的 HTML 为例?

对不起我的英语不好:$

4

3 回答 3

0

您通过 HTTP 获取 HTML 文档。HTTP 通常依赖于 TCP。所以......你不能只是“跳过线”!服务器将始终尝试向您发送您感兴趣的部分之前的所有数据,并且您的通信方必须确认收到此类数据。

于 2013-01-18T15:30:51.537 回答
0

最好的情况下使用而不是readLine()使用read(char[] cbuf, int off, int len)。另一种肮脏的方式

int i =0;
while(while ((inputLine = in.readLine()) != null)
i++;
if(i>200 || i<300 )
DO SOMETHING
in.close();)
于 2013-01-18T15:33:31.823 回答
0
  1. 不要逐行阅读 [使用read(char[] cbuf, int off, int len)]
  2. 不要连接字符串 [使用StringBuilder]

打开缓冲阅读器(就像你已经做的一样):

    URL oracle = new URL("http://www.nationalleague.ch/NL/fr/");
    BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));

不是逐行读取,而是读取 a char[](我会使用大小约为 8192 的一个),而不是使用 aStringBuilder来附加所有 read char

阅读 HTML 源代码的特定行有点冒险,因为 HTML 页面源代码的格式可能会改变。

于 2013-01-18T15:34:50.677 回答