8

jsoup(1.7.1)の最新バージョンをダウンロードし、公式コード(URLを変更)に従います。次に、「httpエラーのURL取得」が発生しました

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        loadData();
    } catch (IOException e) {
        Log.i("error",e.getMessage());
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void loadData() throws IOException {
    Document doc = Jsoup.connect("http://forum.mtr.com.hk/search.php?station=30&cat=&x=25&y=2").get();
    String title = doc.title();
    Log.i("title",title);
}}

私のコードの問題は何ですか?正常に動作するJavaプロジェクトでも同じことをしているので、Androidプロジェクトでエラーが発生したようです。

注:-インターネットの許可を追加しました

4

1 に答える 1

6

私も同様の問題を抱えていました。デバイスの接続が遅すぎてconnect()関数のタイムアウトが早すぎるか、無害なHTTPエラーステータスで失敗している可能性があります。また、私のJsoup接続はほとんどのページで機能しましたが、一部のページでは「URLの取得中にHTTPエラーが発生しました。Status=307」と表示されていました。これは実際には、Webサーバーから別のURLへのリダイレクト要求であることがわかりました。私はこれらすべての問題を次のコードで解決しました:

Connection.Response res = Jsoup.connect(sUrl).
        timeout(5000).ignoreHttpErrors(true).followRedirects(true).execute();
if (res.statusCode() == 307) {
    String sNewUrl = res.header("Location");
    if (sNewUrl != null && sNewUrl.length() > 7)
        sUrl = sNewUrl;
    res = Jsoup.connect(sUrl).
            timeout(5000).execute();
}
Document doc = res.parse();

これが役立つか、少なくともget()またはexecute()を呼び出す前にさらにいくつかの設定を試すように促してくれることを願っています。

グレッグ

于 2012-12-13T16:50:35.100 に答える