Android – исправление Formatter.formatIPAddress с API 12

Я вижу, что метод устарел, и замена должна быть getHostAddress ().

Мой вопрос: как 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); 

У кого-нибудь есть опыт? Я могу получить исходный код из класса форматирования и просто использовать его. Но я бы хотел использовать новый метод.

Solutions Collecting From Web of "Android – исправление Formatter.formatIPAddress с API 12"

Вам нужно преобразовать int в byte [], а затем использовать этот массив для экземпляра 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") 

Теперь я вижу, что форматировщик ожидает little-endian, а bigInteger.toByteArray () возвращает представление в виде большого конца, поэтому байт [] следует отменить.