2012-03-25 7 views
1

Ich habe einen funktionierenden .Net WCF HTTP-Dienst. Wenn ich die URL in IE-, FireFox- oder Google Chrome-Browser einfüge, bekomme ich den richtigen Stream zurück. Aber wenn ich versuche, in einer Android-App (die in Eclipse läuft) auf denselben Dienst zuzugreifen, bekomme ich eine socketException mit der Detailmeldung "Permission Denied". Der Dienst läuft auf meinem Rechner im Visual Studio Webhoster und der Client läuft im Android Emulator auch auf meinem Rechner.Problem beim Zugriff auf funktionierende HTTPService von Android

Die Zeile, die die Ausnahme erhält, ist: InputStream in = neuer BufferedInputStream (urlConnection.getInputStream());

(Ich habe einen früheren Post auf dem gleichen Programm, in dem die URL www.android.com und ich „ungültige URL“ bekommen)

Könnte jemand eine Ahnung, warum der Browser damit kein Problem haben, und der android-client bekommt die erlaubnis verweigert? Dank, Gary

 HttpURLConnection urlConnection = null; 

     try 
     { 
      URL url = new URL("http://localhost:8080/TeamTask/Tasks"); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      InputStream in = new BufferedInputStream(urlConnection.getInputStream());  
      readStream(in); 
     } 
     catch (MalformedURLException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

Antwort

3

Eine Erlaubnis verweigert wird, am wahrscheinlichsten durch keine Erlaubnis in AndroidManifest.xml Datei haben.

Auch, und ich habe es nicht getestet, aber ich würde mir vorstellen, dass die Verwendung von "localhost" nicht funktionieren würde, weil es auf einem Emulator ausgeführt wird, genau wie ein VM-Computer localhost verweist zurück auf die VM nicht die Host-Maschine - geben Sie die IP-Adresse Ihrer Maschine ein. Ich teste gerade einige Android-HTTP-Anrufe von einem anderen Computer im selben Netzwerk und gebe einfach die lokale IP-Adresse meines Servers ein.

EDIT:

Schließlich, hier einige altbewährte Code, den ich auf einer regelmäßigen Basis für die Herstellung von einfachen HTTP-Aufruf:

public String getURLcontents(URL url) throws IOException{ 
    String response = "failed"; 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    Log.v(TAG, "Opening connection: " + url.toString()); 
    try { 
     InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
     response = new Scanner(in).useDelimiter("\\A").next(); 
    } 
    catch (Exception e) { 
     urlConnection.disconnect(); 
     return response = "failed"; 
    } 
    finally { 
     urlConnection.disconnect(); 
     Log.v(TAG, "Closed connection"); 
    } 
    return response; 
} 
+0

TomJ, danke für die Antwort. Ich kann den Stream jetzt lesen. –

+0

Interessanter (und nicht ganz angenehmer) Nebeneffekt: Wenn Sie HttpUrlConnection in Ihrem * test * -Projekt verwenden, müssen Sie android.permission.INTERNET in Ihrem * main * -Projekt haben, auch wenn das Hauptprojekt möglicherweise nicht einmal HttpUrlConnection-Aufrufe ausführt . –

Verwandte Themen