2013-06-12 42 views
8

我看到該方法已被棄用,替換應該是getHostAddress()。Android - Formatter.formatIPAddress棄用API 12

我的問題是如何getHostAddress替換?我似乎無法讓它在接近相同的事情上做任何事情。

我想要做的是取一個子網掩碼的整數表示並將其轉換爲字符串。

formatIPAddress完成此操作。

作爲一個例子,我的子網掩碼是「255.255.255.192」。 WifiManager返回的整數值爲105696409. formatIPAddress正確返回此值。

我似乎無法讓getHostAddress工作,更不用說將整數值轉換爲子網掩碼字符串。

示例代碼,它工作

WifiManager wm = (WifiManager) MasterController.maincontext.getSystemService(Context.WIFI_SERVICE); 

DhcpInfo wi = wm.getDhcpInfo(); 


int ip = wm.getDhcpInfo().ipAddress; 
int gateway = wm.getDhcpInfo().gateway; 
int mask = wm.getDhcpInfo().netmask; 

String maskk = Formatter.formatIpAddress(mask); 

任何人有這樣的經驗嗎?我可以從格式化程序類獲取源代碼並使用它。但我想只使用新方法。

+0

我真的沒有看到棄用formatIpAddress的原因。但你是怎麼做到的呢? – ThanosFisherman

回答

4

你必須爲int轉換爲字節[],然後使用該數組實例的InetAddress:

... 
int ipAddress = wm.getDhcpInfo().netmask; 
byte[] ipAddress = BigInteger.valueOf(ipAddress).toByteArray(); 
InetAddress myaddr = InetAddress.getByAddress(ipAddress); 
String hostaddr = myaddr.getHostAddress(); // numeric representation (such as "127.0.0.1") 

我現在看到格式化預計小端和bigInteger.toByteArray()返回大 - endian表示,所以byte []應該顛倒過來。