我正在尝试检查是否可以使用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行已被评论。
我出错的任何想法?
由于
答案 0 :(得分:1)
您正在获取主线程异常的网络。在mainthread(即你的UI线程)上使用任何类型的阻塞(或网络活动)都不是一个好习惯。
可能的解决方案:
1.单击您的按钮,弹出一个线程,在该线程中执行您尝试执行的网络活动。() 2.此解决方案不可取。但是,您仍然可以设置清单以允许主线程上的网络活动,Google可以为您提供清单命令。
您可以在NetworkOnMainThreadException上谷歌了解更多信息。
答案 1 :(得分:1)
堆栈跟踪告诉您确切的错误,您正在UI线程上运行网络操作。只需将其移动到Thread或AsyncTask即可。