2012-11-26 10 views
8

Ich lade nur die neueste Version von jsoup (1.7.1) und folgen Sie dem offiziellen Code (änderte die URL). Dann bekam ich "http Fehler beim Abrufen der URL"Jsoup http Fehler beim Abrufen der 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); 
}} 

Was ist das Problem von meinem Code? Es scheint, dass der Fehler gerade in Android Project passiert ist, da ich dasselbe in einem Java-Projekt mache, das gut funktioniert.

Hinweise: - ich haved das Internet Erlaubnis

Antwort

6

Ich hatte ein ähnliches Problem gegeben. Möglicherweise ist die Verbindung zu Ihrem Gerät zu langsam und die Funktion connect() läuft zu früh ab, oder sie schlägt möglicherweise mit einem ungefährlichen HTTP-Fehlerstatus fehl. Auch meine Jsoup-Verbindung funktionierte für die meisten Seiten, aber für einige bekam ich "HTTP error holing URL. Status = 307". Es stellt sich heraus, dass es sich wirklich um eine Weiterleitungsanforderung vom Webserver an eine andere URL handelt. Ich löste all diese Probleme mit dem folgenden Code:

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

hoffe, das hilft, oder zumindest inspiriert Sie noch ein paar Einstellungen zu versuchen, bevor get() aufrufen oder execute().

Greg