2010-01-19 14 views
5

hago un:InetAddress.getByName en Android

java.net.InetAddress serverAddr; 
try { 
    serverAddr = java.net.InetAddress.getByName(Server.SERVERNAME); 
} 
catch (java.net.UnknownHostException exception) { 
    //System.err.println ("wrong server name !!!"); 
    HelloWorldActivity.tv.setText("wrong server name !!!"); 
    return; 
} 

en mi solicitud androide, pero nunca ha resoling el nombre de host, siempre se produce una excepción, no importa el nombre que uso.


Pero el uso de internet en las mismas obras emulador, y he añadido

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

a AndoidManifest.xml

y aquí está la clase de servidor para los que no tengo ninguno suponer

public class Server 
{ 
    public static String SERVERNAME = "monster.idsoftware.com"; 
    public static String SERVERIP = "209.85.129.99"; 
    public static int SERVERPORT = 27950; 
    public static int PROTOCOL = 68; 
} 
+0

Supongo que tiene una clase Server.java? Sé que UnknwnHostException se lanza cuando falla la búsqueda de direcciones. –

+0

sí, agregado anteriormente. –

+0

este código estaría consultando servidores de terremotos, ¿cuál es su resultado deseado? –

Respuesta

4

He encontrado la respuesta. Por alguna razón, usted tiene que utilizar:

java.net.InetAddress[] x= java.net.InetAddress.getAllByName(Server.SERVERNAME) ; HelloWorldActivity.tv.setText("Address: "+x[0].getHostAddress());

1

Es extraño que usted tiene que hacerlo. java.net.InetAddress.getByName funciona para mí, listo para usar.

Hay algunos problemas (en curso) relacionados con la resolución de DNS en el emulador de Android, por lo que podría ser.

0

no sabemos si se trataba de un error tipográfico, pero se dice que tiene:

<use-permission id="android.permission.INTERNET" /> 

Pero tiene que ser:

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

me trataron getByName y trabaja muy bien.

¿Puede ser que haya corregido sus permisos y cambiado de getByName a getAllByName al mismo tiempo? Solo curiosidad, si puedes confirmar que getByName aún no funciona para ti?

1

Estaba teniendo un problema similar y descubrí que en algunas versiones de Android (desde honeycombs) no está permitido por defecto realizar la operación de red desde el hilo principal. Entonces puedes resolverlo de 2 maneras. Realice la operación en un subproceso diferente o permita que la operación de red se realice en el hilo principal. Para hacer eso, use algo como esto:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build(); 
StrictMode.setThreadPolicy(policy); 
+0

, mientras que esto es cierto, es una muy mala práctica hacer conexiones en el hilo de UI porque bloquea el hilo. – momo

+0

gracias. Necesito esta solución ... –

+0

Aunque esta solución funcionaría, no se recomienda y es una mala práctica. Use AsyncTasks para realizar operaciones de red en diferentes subprocesos. – darshanz