2012-04-08 8 views
0

Ich schreibe eine App auf Android 3.1, und ich verwende Galaxy Tab 10.1, um meine App zu testen.Fehler bei der Verwendung von HttpUrlConnection zum Herunterladen von Informationen aus einer bestimmten URL

Ich schrieb eine Funktion namens OpenHttpConnection(), um einige Informationen von einer bestimmten Website zu erhalten. Und der Code-Schnipsel ist:

private InputStream OpenHttpConnection(String urlString) throws IOException { 
    InputStream in = null; 
    int response = -1; 

    URL url = new URL(urlString); 
    String host = url.getHost(); 
    InetAddress address = InetAddress.getByName(host); 
    String ip = address.getHostAddress(); 
    Toast.makeText(this, "ip address: " + ip.toString(), Toast.LENGTH_SHORT).show(); 

    try { 
     HttpURLConnection httpConn = (HttpURLConnection)url.openConnection(); 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setConnectTimeout(5 * 1000); 
     httpConn.setRequestMethod("GET"); 
     Toast.makeText(this, "prepare for connecting", Toast.LENGTH_SHORT).show(); 
     httpConn.connect(); 
     Toast.makeText(this, "connecting established", Toast.LENGTH_SHORT).show(); 
     response = httpConn.getResponseCode(); 
     if (response == HttpURLConnection.HTTP_OK) { 
      in = httpConn.getInputStream(); 
     } 
    } catch (Exception ex) { 
     throw new IOException("Error connecting"); 
    } 
    return in; 
} 

Fehler treten auf, wenn die Zeile "httpConn.connect()" ausgeführt wird. Ich habe diese Frage gegoogelt und festgestellt, dass viele Leute dieses Problem haben, und sie sagten, es sei eine Frage von DNS. Dann habe ich versucht, die IP-Adresse dieser URL zu bekommen, ich scheiterte, etwas war falsch. Ich habe bereits die Erlaubnis zur AndroidManifest.xml wie folgt hinzugefügt:

<uses-permission android:name="android.permission.INTERNET"/> 

Habe ich etwas Erlaubnis verfehlt?

Ich kann mein Tablet verwenden, um erfolgreich auf das Internet zuzugreifen und das DNS meines Tablets ist dasselbe wie mein PC, und sie sind in einem LAN.

Ich bin sehr verwirrt, und können Sie helfen, es zu lösen?

;) thx

+0

Bitte beschreiben Sie den Fehler (überprüfen Sie Logcat) –

+0

Post-URL, die Sie in OpenHttpConnection oder Logcat –

Antwort

0

Ich habe dies kürzlich getan, damit ich wahrscheinlich kann Ihnen sagen, dass es zwei mögliche Probleme sind:

  1. Sie machen müssen sicherstellen, dass Sie dies auf dem Hintergrund tun Gewinde entweder Handler oder AsyncTask.

  2. Wenn Sie dies in Ihrem UIhread tun müssen, müssen Sie Strict mode deaktivieren.

Schauen Sie sich diese große tutorial in running background threads in android, lädt der AyncTask Abschnitt des Tutorials eigentlich eine Webseite so sehr relevant ist. Ich habe es kürzlich ausprobiert und es funktioniert.

+0

Thx für Ihre Antwort übergeben, aber ich denke nicht, dass es hilfreich für mich ist. Mein Problem ist, dass die App den DNS nicht verwenden kann, um die richtige IP-Adresse zu erhalten. Und ich kopiere diesen Code und die Operation aus einem Buch mit dem Namen "Beginning Android Tablet Application Development", es erwähnt nicht den Handler oder AsyncTask. Trotzdem sehr. –

+0

Sie müssen den Fehler melden, den Sie von LogCat erhalten haben, um detailliertere Hilfe zu erhalten. Ich vermute jedoch immer noch, dass es möglicherweise mit 'StrictMode' zu ​​tun hat. Ich weiß nicht, welche Beiträge du gesehen hast, aber sie könnten sich darauf beziehen, 'MultiCast' für WIFI einzuschalten, was bedeuten würde, dass sie mehr mit' mDN'S und nicht mit 'DNS' zu tun haben, in welchem ​​Fall es eine Erlaubnis gibt namens 'CHANGE_WIFI_MULTICAST_STATE'. – Ali

+0

Oh, Sie haben Recht, die App wird erfolgreich ausgeführt, nachdem ich den Strict-Modus ausgeschaltet habe. Vielen Dank und entschuldige mich für meine Eile. –

Verwandte Themen