2012-05-19 8 views
5

Come stampare l'indirizzo IP di un sito Web in Android? Posso eseguire inetaddress e stamparlo usando system.out.println() in netbean. Di seguito è riportato il mio codice di esempio.InetAddress in Android

public String getHostAddress() { 
     InetAddress addr=null; 
     try { 
      addr= InetAddress.getByName("www.google.com"); 
     } 

     catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
     return addr.getHostAddress(); 
    } 

Essa mostra sempre in quanto il programma si è fermato. Potrebbe sapere c'è un modo per ottenere l'indirizzo IP del sito web visitato in Android?

05-19 14:22:39.008: I/dalvikvm(1062): threadid=3: reacting to signal 3 
05-19 14:22:39.049: I/dalvikvm(1062): Wrote stack traces to '/data/anr/traces.txt' 
05-19 14:22:39.688: I/dalvikvm(1062): threadid=3: reacting to signal 3 
05-19 14:22:39.828: I/dalvikvm(1062): Wrote stack traces to '/data/anr/traces.txt' 
05-19 14:22:39.929: D/AndroidRuntime(1062): Shutting down VM 
05-19 14:22:39.948: W/dalvikvm(1062): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
05-19 14:22:40.039: E/AndroidRuntime(1062): FATAL EXCEPTION: main 
05-19 14:22:40.039: E/AndroidRuntime(1062): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.destinationurl/com.android.destinationurl.DestinationURL}: android.os.NetworkOnMainThreadException 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.os.Looper.loop(Looper.java:137) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at dalvik.system.NativeStart.main(Native Method) 
05-19 14:22:40.039: E/AndroidRuntime(1062): Caused by: android.os.NetworkOnMainThreadException 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at java.net.InetAddress.getByName(InetAddress.java:295) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at com.android.destinationurl.DestinationURL.getHostAddress(DestinationURL.java:57) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at com.android.destinationurl.DestinationURL.onCreate(DestinationURL.java:40) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.Activity.performCreate(Activity.java:4465) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
05-19 14:22:40.039: E/AndroidRuntime(1062):  ... 11 more 
05-19 14:22:40.248: I/dalvikvm(1062): threadid=3: reacting to signal 3 
05-19 14:22:40.283: I/dalvikvm(1062): Wrote stack traces to '/data/anr/traces.txt' 
05-19 14:22:40.608: I/dalvikvm(1062): threadid=3: reacting to signal 3 
05-19 14:22:40.698: I/dalvikvm(1062): Wrote stack traces to '/data/anr/traces.txt' 
05-19 14:22:42.078: I/Process(1062): Sending signal. PID: 1062 SIG: 9 
+0

1. si prega di inviare registro di arresto 2. avete i permessi di internet nel manifest? – MByD

+2

L'errore è dovuto al fatto che si sta tentando di eseguire l'accesso alla rete sul thread principale. Vedi [Come risolvere l'Android NetworkOnMainThreadException] (http://www.techblogistech.com/2011/11/how-to-fix-the-android-networkonmainthreadexception/) – Rajesh

+0

Qualcuno può mostrare un esempio di progetto su questo problema che può funzionare correttamente ... grazie. =) – Dummy1234

risposta

3

Semplicemente,

suo l'errore su URL, Basta correggere it ..

"www.google.com" avete 4 w c'è nel tuo URL ...

E aggiungere Usa-permesso <uses-permission android:name="android.permission.INTERNET"> nel file manifesto dell'applicazione Android ..

Questo è corretto ..

addr = InetAddress.getByName("www.google.com");

EDIT: Usa AsyncTask per il funzionamento della rete

String netAddress = null; 
try 
    { 
    netAddress = new NetTask().execute("www.google.com").get(); 
    } 
    catch (Exception e1) 
    { 
    e1.printStackTrace(); 
    } 

E questo è NetTask classe ..

public class NetTask extends AsyncTask<String, Integer, String> 
    { 
     @Override 
     protected String doInBackground(String... params) 
     { 
      InetAddress addr = null; 
      try 
      { 
       addr = InetAddress.getByName(params[0]); 
      } 

      catch (UnknownHostException e) 
      { 
          e.printStackTrace(); 
      } 
      return addr.getHostAddress(); 
     } 
    } 
+0

wwww è solo un errore di battitura ... aggiungo già il permesso di utilizzo, il problema è persistente .. – Dummy1234

+0

Il tuo codice funziona perfettamente nel mio caso, nel thread principale .. Il tuo errore Logcat puntato su NetworkOnMainThreadException quindi metti questo codice in un altro thread di lavoro .. – user370305

+0

Grazie mille ... – Dummy1234

1

Assicurarsi di disporre di tutte le autorizzazioni necessarie. Forse l'applicazione si interrompe perché non dispone di autorizzazioni appropriate. Controlla se disponi dell'autorizzazione di accesso a Internet nel tuo manifest XML.

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

Hai inserito l'URL erroneamente con wwww .google.com.

addr= InetAddress.getByName("www.google.com"); 

Dopo la correzione ha funzionato.

0

Questo perché si sta effettuando una chiamata di rete su il thread principale.

String address = ""; 
AsyncTask.execute(new Runnable() { 
    @Override 
    public void run() { 
     address = InetAddress.getByName("www.google.com"); 
    } 
});