45. (android开发)主线程以外执行网络请求

在 kotlin 开发 android 应用的时候,我们知道,HTTP请求被不允许在主线程中执行,否则会抛出异常。这样的设计是因为,阻塞UI线程是一个非常差的体验。所以,我们使用 doAsync 来处理异步任务。
打开 android studio 新建一个项目,建立一个 activity,这里命名这个 activity 为 freeTestActivity。
一般默认建立的 AS 项目,默认的 activity 名字是 MainActivity。为了简单直接运行 freeTestActivity,我们修改一下 AndroidMainifest.xml 文件。




    

    
        

        
        
            
                

                
            

        
    


这样 freeTestActivity 就是默认 activity 了。
注意前面的 uses-permission 标签。这里申请了网络权限。以确保告知操作系统,这个应用需要网络访问。
我们的网络请求,就设定为访问“百度”,然后把请求回来的信息使用提示框显示一下。
那么在 freeeActivity.kt 文件中的 onCreate 函数中增加如下代码

        doAsync {
            var str = URL("http://www.baidu.com").readText()
                if ((str == null)||(str.length == 0)){
                    str = URL("https://www.baidu.com").readText()
                }
            uiThread { toast(str) }
        }

这里的 toast 是一个扩展函数。在 class freeTestActivity 内实现。

    fun Context.toast(message:CharSequence, duration: Int = Toast.LENGTH_LONG){
        Toast.makeText(this, message, duration).show()
    }
45. (android开发)主线程以外执行网络请求_第1张图片
2017-12-13-11-19-33-556_com.cofox.mykt.mykfa.png

你可能感兴趣的:(45. (android开发)主线程以外执行网络请求)