2012-01-11 95 views
5

支持我試圖運行簡單的應用程序從Android模擬器訪問互聯網,這裏是我的代碼。我在代理後面並通過「...無線網絡 - > APN - > ...」在模擬器中配置代理設置。但互聯網正在從瀏覽器,而不是從應用程序。java.net.SocketException異常:地址家族不受協議在Android模擬器

  HttpURLConnection connection = null; 
    String URLName = "http://www.google.com"; 

    try { 
     URL u = new URL(URLName); 
     connection = (HttpURLConnection) u.openConnection(); 
     connection.setRequestMethod("HEAD"); 
     int code = connection.getResponseCode(); 
     Log.d(TAG1, " " + code); 
     // You can determine on HTTP return code received. 200 is success. 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.d(TAG1, e.toString()); 
    } 

    finally { 
     if (connection != null) { 
      connection.disconnect(); 
     } 
    } 

錯誤日誌中logcat中的部分如下:

01-11 01:01:26.308: DEBUG/SntpClient(72): request time failed: java.net.SocketException: Address family not supported by protocol 

01-11 01:02:39.909: WARN/System.err(422): java.net.SocketException: The operation timed out 

我試着在論壇上搜索後,下面的選項,但他們都不似乎工作:

  1. 在安卓啓動選項我用-http代理服務器:端口-dns服務器服務器

  2. 我甲肝Ë列入清單文件權限互聯網

    使用許可權的android:NAME = 「android.permission.INTERNET對」

    uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 
    
  3. 設置系統屬性來使用IPv4棧之後有人建議

     java.lang.System.setProperty("java.net.preferIPv4Stack", "true"); 
    java.lang.System.setProperty("java.net.preferIPv6Addresses", "false"); 
    

我正在Android 2.2和windows vista上工作,請你幫我在這裏...

+0

瀏覽器在模擬器中工作正常嗎? – 2012-01-11 12:06:44

+0

@LalitPoptani yes瀏覽器在模擬器中正常工作 – 2012-01-11 12:14:26

回答

0

只是盡力去做.....

connection.setConnectTimeout(timeoutInMillisecs); 

可能你沒有設置它。

+0

我試過但仍然沒有用。 – 2012-01-11 12:38:57

+0

好,嘗試使用---------- HttpConnectionParams.setConnectionTimeout(client.getParams(),CONNECTION_TIMEOUT); \t \t \t HttpConnectionParams.setSoTimeout(client.getParams(),SOCKET_TIMEOUT); – 2012-01-11 12:41:54

0

嘗試添加該到AndroidManifest.xml還有:

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

您還需要抓住這個例外:

catch(SocketException ex) 
     { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage()); 
      ex.printStackTrace(); 
     } 
+0

嘗試這個之後,它爲本地地址(代理服務器)工作。仍然外部地址不工作.. – 2012-01-11 13:04:59

+6

從http://stackoverflow.com/questions/7854300/java-net-socketexception-address-family-not-supported-by-protocol – Will 2012-04-13 18:43:14

0

嘗試以編程方式設置代理和端口的OnCreate()之類這

 System.setProperty("http.proxyHost","IPaddress of ur machine"); 
     System.setProperty("http.proxyPort","port no"); 
0

請試試這個:

HttpURLConnection con =null; 

URL url = new URL("abcdefg"); 

Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(android.net.Proxy.getDefaultHost(),android.net.Proxy.getDefaultPort())); 

con = (HttpURLConnection) url.openConnection(proxy); 
相關問題