Reputation: 177
How to print the IP address of a website in Android? I can run InetAddress
and print it by using system.out.println()
in netbean. Below is my sample coding:
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();
}
It always shows "Unfortunately, your program has stopped."
May I know is there any way to get the IP address of the visited website 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
Upvotes: 8
Views: 20739
Reputation: 253
This is because you are making a network call on the main thread.
String address = "";
AsyncTask.execute(new Runnable() {
@Override
public void run() {
address = InetAddress.getByName("www.google.com");
}
});
Upvotes: 1
Reputation: 109257
Simply,
Its your mistake on URL, Just correct it..
"www.google.com" you have 4 w's in your URL...
And add Use-Permission <uses-permission android:name="android.permission.INTERNET">
in manifest file of your android application..
This one is correct..
addr = InetAddress.getByName("www.google.com");
EDIT: Use AsyncTask
for Network Operation
String netAddress = null;
try
{
netAddress = new NetTask().execute("www.google.com").get();
}
catch (Exception e1)
{
e1.printStackTrace();
}
And this one is NetTask class..
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();
}
}
Upvotes: 8
Reputation: 555
You have entered the URL wrongly with wwww.google.com.
addr= InetAddress.getByName("www.google.com");
After correction it worked.
Upvotes: 2
Reputation: 993
Make sure that you have all the permissions you need. Maybe your application stops because it does not have proper permissions. Check if you have Internet Access permission in your XML manifest.
<uses-permission android:name="android.permission.INTERNET">
Upvotes: 1