2013-07-30 82 views
-1

我想提取基于使用jsoup的某些属性的链接。代码工作正常 当我运行它作为一个简单的Java程序,但是当我在Android中运行它,我没有得到结果。我运行的代码如下:jsoup不能正确解析HTML上的android

List<String> feeds = new ArrayList<>(); 
try { 
    Document doc = Jsoup.connect("http://www.bbc.co.uk/news/").get(); 
    Elements links = doc.getElementsByTag("link"); 

    String type = "application/rss+xml"; 

    for (Element link : links) { 
     if (link.attr("type").equals(type)) { 
      //System.out.println(link.attr("href")); 
      feeds.add(link.attr("href")); 
     } 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

for(String item : feeds){ 
    System.out.println(item); 
} 

作为一个简单的Java代码,它能够找到bbc.co.uk/news 一个链接到一个RSS文件,但是当我运行它的Android的AsyncTask里面,我没有得到任何结果。 任何解释?

+0

您的应用程序有互联网的权限? – dymmeh

+0

是的,它有互联网权限 – user2635155

+0

有一个很好的机会,你只是没有正确使用异步任务。你为什么不粘贴你的异步任务代码? –

回答

1

这似乎是User-Agent的问题。 尝试重写默认userAgent像下面

Document doc = Jsoup.connect("http://www.bbc.co.uk/news/") 
      .userAgent("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36") 
      .get(); 
0

很可能你会得到套接字超时。尽量增加timout值

Jsoup.connect(url).timeout(10000).get(); 

检查堆栈跟踪java.net.SocketTimeoutException的。

+0

我试过了,但没有改进,并且引发了异常。 – user2635155

+0

我甚至试过其他的东西:而不是只提取“应用程序/ rss + xml”链接,我试图提取所有链接。我得到了奇怪的结果:普通的java程序返回所有链接,包括一个应用程序/ rss + xml。 Android版本也会返回一些链接,但是这次应用程序/ rss + xml丢失了! – user2635155