2013-03-12 51 views
1

我有一個問題是,如果我嘗試InetAddress.getLocalHost()甚至InetAddress.getByName(String host)在它每次拋出一個異常,即使是知名網站類似nba.com我是一個混淆位FYI的目標設備是一個機器人4.1.1 GS3和WiFi和移動網絡上。下面利用InetAddress來獲得自己的IP

  try{ 
     InetAddress ownIP=InetAddress.getLocalHost(); 
     System.out.println("IP of my Android := "+ownIP.getHostAddress()); 
     }catch (Exception e){ 
      System.out.println("Exception caught ="+e.getMessage()); 
      String t = e.getMessage() + "yes"; 
     } 

代碼下面是System.out的

03-12 18:59:52.636:I /的System.out(18996):異常捕獲= NULL

預先感謝

+0

看看這個帖子http://stackoverflow.com/questions/6064510/how-to-get-ip-address-of-the-device – Quanturium 2013-03-12 23:30:10

+0

如果'InetAddress.getLocalHost()'真的拋出一個異常,你有一個嚴重的錯誤配置'hosts'文件和/或DNS。 – EJP 2013-03-13 09:15:59

回答

2

我相信我已經發現了什麼我的問題基本上是我想你不能在Android的主線程中執行任何網絡操作,這是之前可選的,現在需要對於Honeycomb(API 11),下面是根據谷歌規格的評論。

「爲了避免阻塞主用戶界面線程,谷歌建議使用從android.os包中的AsyncTask類:」

因此,所有我創建一個新類NetTask延伸的AsyncTask,並執行所有的網絡應用程序,以便現在我的代碼正在工作。 IDK如果別人知道,但我想我會張貼此情況下,在像我這樣的任何newbs仍在尋找一個解決方案:)!

感謝

2

我用一個棘手的方法來獲得自己的IP。你可以看它是否有助於你

String getIP() { 
    try { 
     Socket socket = new Socket("google.com", 80); 
     return socket.getLocalAddress().getHostAddress(); 
    } catch (Exception e) { 

    } 
}