2012-05-19 14 views
5

Làm thế nào để in địa chỉ IP của một trang web trong Android? Tôi có thể chạy inetaddress và in nó bằng cách sử dụng system.out.println() trong netbean. Dưới đây là mẫu mã của tôi.InetAddress trong 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(); 
    } 

Luôn hiển thị Rất tiếc, chương trình của bạn đã dừng. Có thể biết có cách nào để nhận địa chỉ IP của trang web được truy cập trong Android không?

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. vui lòng đăng nhật ký sự cố 2. Bạn có quyền truy cập internet trong tệp kê khai không? – MByD

+2

Lỗi của bạn là do bạn đang cố thực hiện truy cập mạng trên chuỗi chính. Xem [Cách khắc phục mạng AndroidOnMainThreadException] (http://www.techblogistech.com/2011/11/how-to-fix-the-android-networkonmainthreadexception/) – Rajesh

+0

Bất kỳ ai cũng có thể hiển thị dự án mẫu về vấn đề này có thể hoạt động đúng ... cảm ơn bạn .. =) – Dummy1234

Trả lời

3

đơn giản,

nó sai lầm của bạn trên URL, Chỉ cần sửa nó ..

"www.google.com" bạn có 4 w là trong URL của bạn ...

Và thêm sử dụng-Permission <uses-permission android:name="android.permission.INTERNET"> trong file manifest của ứng dụng Android của bạn ..

Cái này là chính xác ..

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

EDIT: Sử dụng AsyncTask cho Mạng lưới hoạt động

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

Và đây là một trong NetTask lớp ..

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 chỉ là lỗi đánh máy ... tôi đã thêm quyền sử dụng, vấn đề vẫn tồn tại .. – Dummy1234

+0

Mã của bạn hoạt động hoàn hảo trong trường hợp của tôi, Trong chủ đề chính .. Lỗi Logcat của bạn chỉ trên NetworkOnMainThreadException vì vậy đặt mã này trong chủ đề công nhân khác .. – user370305

+0

Cảm ơn bạn rất nhiều ... – Dummy1234

1

Đảm bảo rằng bạn có tất cả các quyền bạn cần. Có thể ứng dụng của bạn dừng vì ứng dụng không có quyền phù hợp. Kiểm tra xem bạn có quyền truy cập Internet trong tệp kê khai XML của bạn hay không.

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

Bạn đã nhập URL sai với wwww .google.com.

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

Sau khi sửa nó hoạt động.

0

Điều này là do bạn đang thực hiện cuộc gọi trên mạng chủ đề chính.

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