0

我正在尝试检查是否可以使用 android 应用程序访问 Web 服务。

在我的按钮点击监听器中是:

    try {

            InetAddress address = InetAddress.getByName(result); // user input is 'result' (a URL) LINE 73
            boolean b = address.isReachable(3000); 
            String str = String.valueOf(b); // turning the value of the boolean into string
            pingResult.setText(str); // value displays as true or false

            }

    catch (UnknownHostException e) {} // will fill with helpful message later
    catch (IOException e) {}

Logcat 显示:

05-10 15:21:21.390: E/AndroidRuntime(11653): FATAL EXCEPTION: main
05-10 15:21:21.390: E/AndroidRuntime(11653): Process: com.example.c3po, PID: 11653
05-10 15:21:21.390: E/AndroidRuntime(11653): android.os.NetworkOnMainThreadException
05-10 15:21:21.390: E/AndroidRuntime(11653):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
05-10 15:21:21.390: E/AndroidRuntime(11653):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
05-10 15:21:21.390: E/AndroidRuntime(11653):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
05-10 15:21:21.390: E/AndroidRuntime(11653):    at java.net.InetAddress.getByName(InetAddress.java:289)
05-10 15:21:21.390: E/AndroidRuntime(11653):    at com.example.c3po.MainActivity$2.onClick(MainActivity.java:73)

还有一些,第 73 行已被评论。

有什么想法我哪里出错了吗?

谢谢

4

2 回答 2

1

您正在获得主线程异常的网络。在主线程(即您的 UI 线程)上使用任何类型的阻塞(或网络活动)都不是一个好习惯。

可能的解决方案:

1.在您的按钮上单击 Spawn a thread ,在该线程中执行您尝试执行的网络活动。() 2.不建议使用此解决方案。但是,您仍然可以将清单设置为允许在主线程上进行网络活动,Google 可以为您提供清单命令。

您可以在 NetworkOnMainThreadException 上搜索以了解更多信息。

于 2014-05-10T14:57:28.023 回答
1

堆栈跟踪准确地告诉您您做错了什么,您正在 UI 线程上运行网络操作。只需将其移至 Thread 或 AsyncTask 即可。

于 2014-05-10T14:58:23.807 回答