2012-03-25 58 views
1

我有一個工作的.Net WCF HTTP服務。如果我將URL放入I.E,FireFox或Google Chrome瀏覽器中,我會找回正確的流。但是當我嘗試在Android應用程序(在Eclipse中運行)中訪問相同的服務時,我得到一個帶有詳細消息「權限被拒絕」的socketException。該服務在我的機器上運行在Visual Studio網絡託管服務器上,客戶端也在我的機器上的android模擬器中運行。從Android訪問工作HTTPService時遇到問題

獲取該異常的行是: InputStream in = new BufferedInputStream(urlConnection.getInputStream());

(我對同一方案,其中URL是www.android.com和我得到「無效的URL」先前的帖子)

也許人有一個線索,爲什麼瀏覽器有沒有問題和Android客戶端獲得權限被拒絕? 感謝, 加里

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

回答

3

否認是最有可能不是在你的AndroidManifest.xml文件權限引起了許可。

此外,我還沒有測試過它,但我會想象使用「localhost」將無法開始工作,因爲它在仿真器上運行,就像使用本地主機的VM機器指向VM一樣,而不是主機 - 放入你機器的IP地址。我目前正在測試來自不同機器的一些Android HTTP調用,並且只是輸入我的服務器的本地IP。

編輯:

最後,這裏是一些嘗試和真正的代碼,我定期使用製作簡單HTTP調用:

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,感謝您的回答。我現在可以讀取流。 – 2012-04-05 16:51:31

+0

有趣的(也不是很令人愉快的)副作用:如果你在* t​​est *項目中使用HttpUrlConnection,你的* main *項目中必須有android.permission.INTERNET,即使主項目甚至不會執行HttpUrlConnection調用。 – 2013-10-10 20:47:28