在 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()
}