2013-04-21 23 views
6

古いコードをいくつか取り上げて再ビルドしました。私のタブレットと電話機で動作していたメソッドの1つが機能しなくなりました。私は私のIPアドレスを取得するためにここでピックアップルーチンを使用しようとしています。NetworkInterface.getNetworkInterfaces()はnullメッセージ文字列で例外をスローします

"for(Enumeration ..."で始まる行4を実行すると、すぐに例外キャッチセクションにジャンプします。例外にはメッセージはなく、文字列に対してはex.getMessage()がnullを返します。番号は830034796568(10進数)である。

ここでコードがあります。Asこれは一年前にうまく働いた。任意の助け

ありがとう!

public String getLocalIpAddress() { 
    String address= null; 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       address = new String(inetAddress.getHostAddress().toString()); 
       if (!inetAddress.isLoopbackAddress() && address.length() < 18) { 
        return inetAddress.getHostAddress().toString(); 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     String msg = ex.getMessage(); 
     //do nothing 
    } 
    return null; 
} 
+0

RuntimeExceptionにSocketExceptionをラップして再スローして、完全なスタックトレースを確認できますか? – alex

+0

私はそれを「RuntimeExceptionを投げる」ように変更しました(例); Eclipseデバッガで表示されるstacktraceはnullです。これは少し新しく起動します。私は – moticon

+0

アンドロイドのパーミッションを許可していましたが、android.permission.ACCESS_NETWORK_STATE。 – moticon

答えて

9

をフルな答えを明確にするために言及した。

NetworkInterface.getNetworkInterfaces() 

アプリケーションがandroid.permission.ACCESS_NETWORK_STATEをスキップすることができます(Androidの4.4.2に)私のテストではAndroidManifest.xml

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

にこの権限が不足している場合SocketExceptionをスローします。

+0

しかし、私はインターネットなしでインターフェイスを持つことができます。インターフェイスの許可なしにネットワークインターフェイスを取得する方法はありますか? – Saby

+0

あなたは人生保護人です!どうもありがとうございました。 –

関連する問題