1

問題をどのように説明すればよいか正確にはわかりませんが、基本的には 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()' で null ポインターが返されます。

これがどうなるかわかりません。アプリは公開され、動作していますが、突然クラッシュし始め、Web ページのレイアウトに何か変更があったと思いましたが、スタンドアロン プログラムを実行し、同じ articleLink を渡したところ、動作しました。私のコンピューターでは問題ありませんが、アンドロイドでは 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>

それで、何かが変わった...

4

1 に答える 1

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();

現在のユーザー エージェントはこちらで確認できます。

于 2012-12-17T06:11:34.857 に答える