主线程网络异常

2020/09/14
共 414 字
约 1 分钟
归档: 学习
标签: Android

解决android.os.NetworkOnMainThreadException


参考:csdn

仓库:mvnrepository

这些天一边学Android一边写些小玩意

Android Studio基于IDEA,所以界面操作都十分相似,上手十分快

项目自动化构建工具Gradle有着跟maven一样的依赖管理系统,在build.gradle的dependencies中使用implementation就可以轻松引入各类包这样就有意思了,引入Jsoup就可以直接在安卓上写简单的爬虫了配合Sqlite把爬取到的数据存进数据库,就可以做为个练习demo

由于用过Jsoup,也没有多研究就直接使用了但是发起网络请求的时候就遇到了个问题报出了android.os.NetworkOnMainThreadException的错误翻译过来就是主线程网络异常

原来早在安卓4.0以后,写在主线程中的HTTP请求,运行时都会报错官方解释:developer

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. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it’s heavily discouraged. See the document Designing for Responsiveness.

有两种解决方法:
1、严格模式中的线程安全改为允许全部,几乎就是把网络线程安全取消了

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

2、更佳的做法是新建一个子线程,把结果通过Message跟Handle回传到主线程或回调函数

new Thread(new Runnable(){
    @Override
    public void run() {
        //操作
    }
}).start(

当然,别忘一开始要在manifest.xml中添加网络权限的请求

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

留言

本站已运行
© 2024 Jack  由 Hexo 驱动
目录

复制成功