Android与桌面应用程序

时间:2012-12-10 02:40:07

标签: android jsoup

我不确定如何描述问题,但基本上,我正在使用JSoup来解析一些HTML并删除文章文本。我正在使用的方法是:

    public static String getArticle(String articleLink) {
    Log.i("article link", articleLink);
    Document doc = null;
    try {
        doc = Jsoup.connect(articleLink).timeout(10000).get(); 
    } catch (IOException ioe) {
        return null;
    }
    Elements articleBody = doc.select("div.article-body");
    Element first = articleBody.first();
    return first.text();
}

当我拿出这段代码,并在Netbeans中创建一个示例程序,并传递到该页面的链接时,它返回文章就好了。但是,当我在我的Android设备上运行它时,我在'return first.text()'处得到一个空指针。

我不确定这是怎么回事。该应用程序已发布并一直在运行,但突然之间,它开始崩溃,让我相信网页布局发生了变化,但我只是运行了独立程序,传入同一篇文章链接,它的工作原理在我的电脑上很好,但我在android上得到了nullPointer。同样的jsoup版本,任何想法?

更新:doc变量的值为:

<!DOCTYPE html>
<html>
<head> 
<title>Redirecting...</title> 
<meta http-equiv="refresh"     content="0;url=http://m.ncataggies.com/mobile/ViewArticle.dbml?    atclid=205823481&amp;DB_MENU_ID=&amp;SPSID=&amp;SPID=&amp;DB_OEM_ID=24500" /> 
<meta name="ROBOTS" content="NOINDEX,NOFOLLOW" /> 
</head> 
<body>  
</body>
</html>

所以事情发生了变化......

1 个答案:

答案 0 :(得分:3)

ncataggies.com处的服务器正在检查请求中的用户代理标头,并向移动浏览器提供不同的网页。由于您未指定用户代理,因此服务器会看到Android提供的默认代理,该代理将其标识为移动浏览器。

jsoup中,您可以像这样设置用户代理:

String ua = "Mozilla"; // I'd suggest using your current browser as reference    
doc = Jsoup.connect(url).userAgent(ua).timeout(10000).get();

您可以查看当前的用户代理here