0

我有一个奇怪的问题,分别是使用我的自编程 android 应用程序的奇怪效果。

我的应用程序读取网站的 HTML 源代码并解析它以获得我想要的信息。它工作......哦,好吧,不是很一致。

场景 1:我在家里使用我的无线局域网并运行我的应用程序 -> 一切正常。所有需要的项目都可以在我的 ListView 中看到

场景 2:我使用我的移动互联网,如 Edge 或 HSDPA -> 我的 ListView 只显示 1 个项目。其他的都消失了……

我不知道为什么。是否有任何超时,会阻止应用程序读取整个 HTML 站点?但所有其他项目将直接跟随在 HTML 源代码的下一行......

我不知道我该如何解决它。在谷歌上我没有找到其他人有同样的问题。

问候,朱利安

这是一些代码

    // With this I get the HTML-source-code
URL url = new URL("http://www.area4.de);
URLConnection conn = url.openConnection();
DataInputStream dataIn = new DataInputStream(conn.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(dataIn, "UTF-8"));
String line;

// Then I parse the code with 
while ((line=reader.readLine()) != null)
{
   if (line.contains(searchPattern))
       al.add(line); //al is an ArrayList
}

到目前为止,这就是我在我的应用程序中所做的一切(除了在 ListView 中显示 arrayList)。您可以在浏览器中看到的网站源代码 (Ctrl + u)。我搜索这些行

<a href="/de/bands/thirty-seconds-to-mars/" class="Schrift_22">THIRTY SECONDS TO MARS //</a>
<a href="/de/bands/dropkick-murphys/" class="Schrift_20_dunkel">DROPKICK MURPHYS //</a>

有了 3G,我只有 30 秒到达火星……

4

2 回答 2

1

啊,我解决了。如上所示,我使用此代码片段进行了搜索

while ((line=reader.readLine()) != null)
{
   if (line.contains(searchPattern))
       al.add(line); //al is an ArrayList
}

使用无线局域网(和我的模拟器),我真的为每个乐队都有了一条新线路,例如:

line1
line2
line3
....

但是对于 Edge 或 HDSPA,我使用 Wlan 获得的所有行都写在一行中。

line1line2line3....当我找到所需的目标时,使用我的正则表达式,我在行前后删除所有内容。希望你能理解, 用外语很难解释。

一个简单的

while (line.contains(searchPattern))

解决它。

于 2011-04-05T06:36:38.160 回答
0

在发送它进行解析之前,您总是可以尝试阅读整个 http 响应。这样您就可以看到整个文档已正确加载。

于 2011-04-04T08:57:42.297 回答