简体   繁体   English

用于ping的Android应用无法正常工作

[英]Android App for ping not work

I try to write simple ping app on Android but it doesn't work. 我尝试在Android上编写简单的ping应用程序,但不起作用。 it's stop working when I try to ping IP address. 当我尝试ping IP地址时,它停止工作。 here is code 这是代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

Button pingbtn = (Button) findViewById(R.id.Ping_btn);
   final  TextView Ipinfo = (TextView) findViewById(R.id.Ping_info);
    final EditText Ipfield = (EditText) findViewById(R.id.Ip_field);
    Ipfield.setText("127.0.0.1");
    pingbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Editable host = Ipfield.getText();

            InetAddress Address = null;
            try
            {
                Address = InetAddress.getByName(host.toString());
            }
            catch (UnknownHostException e)
            {
            e.printStackTrace();
            }
               try {
                   if (Address.isReachable(5000)) {
                       Ipinfo.append("\n" + host + "- Response ok");
                   } else {
                       Ipinfo.append("\n" + host);
                   }
               }
        catch(IOException e)
            {
              Ipinfo.append("\n "+ e.toString());
            }
        }
    });

}

} }

And here is Error 这是错误

FATAL EXCEPTION: main Process: com.example.reaper.simpleping, PID: 15226 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) at libcore.io.IoBridge.connectErrno(IoBridge.java:154) at libcore.io.IoBridge.connect(IoBridge.java:122) at java.net.InetAddress.isReachable(InetAddress.java:761) at java.net.InetAddress.isReachable(InetAddress.java:715) at java.net.InetAddress.isReachable(InetAddress.java:685) at com.example.reaper.simpleping.MainActivity$1.onClick(MainActivity.java:43) at android.view.View.performClick(View.java:4756) at android.view.View$PerformClick.run(View.java:19749) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.M 致命异常:主进程:com.example.reaper.simpleping,PID:15226 android.os.NetworkOnMainThreadException在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)在libcore.io.BlockGuardOs.connect(BlockGuardOs。的libcore.io.IoBridge.connectErrno(IoBridge.java:154)处的libcore.io.IoBridge.connect(IoBridge.java:122)处的java.net.InetAddress.isReachable(InetAddress.java:761)处的java:110) com.example.reaper.simpleping.MainActivity $ 1.onClick(MainActivity.java:43)上的java.net.InetAddress.isReachable(InetAddress.java:685)上的java.net.InetAddress.isReachable(InetAddress.java:715) android.os.Handler.handleCallback(Handler.java:739)处的android.view.View $ PerformClick.run(View.java:19749)处的android.view.View.performClick(View.java:4756)在java.lang.reflect.Method上的.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:135)在android.app.ActivityThread.main(ActivityThread.java:5221)处。 java.lang.reflect.M上的invoke(Native Method) ethod.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)上的ethod.invoke(Method.java:372)(com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)上的ethod.invoke(Method.java:372)

I can't understand what is a problem and please help me find how fix this error. 我无法理解是什么问题,请帮助我找到解决此错误的方法。 thanks for Attention. 感谢您的关注。

The exception that is thrown when an application attempts to perform a networking operation on its main thread. 当应用程序尝试在其主线程上执行联网操作时引发的异常。

This is only thrown for applications targeting the Honeycomb SDK or higher. 仅针对面向Honeycomb SDK或更高版本的应用程序抛出此错误。 Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. 允许以较早版本的SDK为目标的应用程序在其主事件循环线程上进行联网,但不建议这样做。 See the document Designing for Responsiveness . 请参阅文档“响应能力设计”

As @dhiku said it is heavily discouraged but you can run this piece of code to allow all kinds of threads. 正如@dhiku所说,强烈建议不要这样做,但是您可以运行这段代码来允许所有类型的线程。 Run in your onCreate() after setting the content: 设置内容后,在onCreate()运行:

    //allow all threading policies
    if(Build.VERSION.SDK_INT >9){
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM