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

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cofox.mykt.mykfa">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">

        </activity>
        <activity android:name=".freeTestActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
    </application>

</manifest>

这样 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()
    }
2017-12-13-11-19-33-556_com.cofox.mykt.mykfa.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-androi...
    eddy_wiki阅读 3,305评论 0 20
  • 0.Android手机操作系统的四层架构? Applications , Application Framewor...
    lucas777阅读 7,895评论 0 16
  • 内容来之网络,因为看到布局太乱,重新整理下,并对答案做了一些修改。如果有侵权,请给我私信。谢谢。 1.下列哪些语句...
    蝴蝶之梦天使阅读 1,631评论 2 22
  • 2017. 05.08 太久没有看电影了 大概2年前看了《活着》的小说,看完以后并没有很深很深的震撼,大概是已经认...
    木一山阅读 394评论 0 0
  • □丘豸 四 那几年,是我的老师人生最为难忘的一段。老师教过化学,物理,也教过美术和音乐。尤其是教音乐,让老师的才华...
    丘墨豸阅读 850评论 14 35