最近在做一个项目的时候遇到一个问题,那就是无论如何都无法访问网络,一开始我以为是我的 HTTP 请求类出了问题,于是换了好几个封装好的 HTTP Client,可是一点用都没有,还是无法访问。
接着百度了一下,有人说是因为没有给权限,于是我在 AndroidManifest.xml 里添加了以下内容
结果依然无效!但是不可否认,这个权限必须要设定的(后来我也试过了,不加权限是不能访问的,但是问题根源不在这)
然后又是百度,翻来翻去找到了一个帖子,里面谈到了线程问题。
因为 Android 开发工程师考虑到用户的体验,HTTP 请求通常需要放在一个单独的线程里进行。
于是我将 HTTP 请求代码放入一个新线程中执行
new Thread(){
@Override
public void run() {
CgiText = HttpClient.sendGet("http://192.168.1.12/cgi/");
}
}.start();
结果依然无法访问!!到底是什么鬼?
就在我快崩溃的时候,一个很偏门的帖子被我找到了。
原来是 StrictMode 在作怪
解决方法就是,加入下面这个方法
public static void closeStrictMode() {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
}
然后在每次 HTTP 请求之前调用一次这个方法,将 StrictMode 关闭就可以了。