Loading...

Android 无法访问网络的解决方法

最近在做一个项目的时候遇到一个问题,那就是无论如何都无法访问网络,一开始我以为是我的 HTTP 请求类出了问题,于是换了好几个封装好的 HTTP Client,可是一点用都没有,还是无法访问。

接着百度了一下,有人说是因为没有给权限,于是我在 AndroidManifest.xml 里添加了以下内容

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

结果依然无效!但是不可否认,这个权限必须要设定的(后来我也试过了,不加权限是不能访问的,但是问题根源不在这)

然后又是百度,翻来翻去找到了一个帖子,里面谈到了线程问题。

因为 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 关闭就可以了。

发表评论

》表情