2013-06-12 8 views
8

Ich sehe, dass die Methode veraltet ist und die Ersetzung getHostAddress() sein soll.Android - Formatter.formatIPAddress Deprecation mit API 12

Meine Frage ist, wie ist GetHostAddress ein Ersatz? Ich kann es anscheinend nicht dazu bringen, irgendetwas in der gleichen Sache zu tun.

Was ich versuche, ist eine ganzzahlige Darstellung einer Subnetzmaske zu nehmen und in eine Zeichenfolge zu konvertieren.

FormatIPAddress macht dies perfekt.

Als Beispiel ist meine Subnetzmaske "255.255.255.192". Der ganzzahlige Wert, den der WifiManager zurückgibt, lautet 105696409. formatIPAddress gibt das korrekt zurück.

Ich kann getHostAddress nicht scheinen, sogar zu arbeiten, geschweige denn einen Integer-Wert in eine Subnetzmaske Zeichenfolge konvertieren.

Beispiel-Code, der keine Erfahrung mit dieser

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); 

Wer noch funktioniert? Ich kann den Quellcode aus der Formatierungsklasse abrufen und einfach verwenden. Aber ich möchte nur die neue Methode verwenden.

+0

Ich sehe wirklich keinen Grund für die Ablehnung von formatIpAddress. Aber wie hast du das denn gemacht? – ThanosFisherman

Antwort

4

Sie haben die int zu konvertieren [] auf Byte und unter Verwendung dann dieses Array-Instanz 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") 

Jetzt sehe ich, dass die Forma Little-Endian und bigInteger.toByteArray() erwartet gibt eine große -Dennian-Darstellung, so sollte das Byte [] umgekehrt werden.