2012-01-11 25 views
5

私はアンドロイドエミュレータからインターネットにアクセスする簡単なアプリケーションを実行しようとしています。私はプロキシの背後にあり、 "...無線ネットワーク - > APN - > ..."でエミュレータのプロキシ設定を構成しました。しかし、インターネットはアプリケーションからではなくブラウザから作業しています。java.net.SocketException:アンドロイドエミュレータのプロトコルでサポートされていないアドレスファミリ

  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-proxy server:port -dns-server server

  2. I hav誰かが

     java.lang.System.setProperty("java.net.preferIPv4Stack", "true"); 
    java.lang.System.setProperty("java.net.preferIPv6Addresses", "false"); 
    
  3. を示唆した後のIPv4スタックを使用するために、システムのプロパティを設定名= "android.permission.INTERNETあなた"

    uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 
    
  4. :eはマニフェストファイルでのインターネットのアクセス権

    はアンドロイド許可を使用しています含ま

私はAndroid 2.2とWindows Vistaに取り組んでいます。ここで私を助けてください...

+0

ブラウザはエミュレータで正常に動作しますか? –

+0

@LalitPoptaniはいブラウザエミュレータでうまく動作します –

答えて

0

ちょっとしてみてください.....

connection.setConnectTimeout(timeoutInMillisecs); 

おそらく設定していません。

+0

私はこれを試しましたが、まだ使用していません。 –

+0

良い、使用しようとする---------- HttpConnectionParams.setConnectionTimeout(client.getParams()、CONNECTION_TIMEOUT); \t \t \t HttpConnectionParams.setSoTimeout(client.getParams()、SOCKET_TIMEOUT); –

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

これを試した後、ローカルアドレス(プロキシの後ろ)で動作します。それでも外部アドレスは機能していません。 –

+6

盗難http://stackoverflow.com/questions/7854300/java-net-socketexception-address-family-not-supported-by-protocol – Will

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); 
関連する問題