在 kotlin 開(kāi)發(fā) android 應(yīng)用的時(shí)候,我們知道,HTTP請(qǐng)求被不允許在主線程中執(zhí)行,否則會(huì)拋出異常。這樣的設(shè)計(jì)是因?yàn)?,阻塞UI線程是一個(gè)非常差的體驗(yàn)。所以,我們使用 doAsync 來(lái)處理異步任務(wù)。
打開(kāi) android studio 新建一個(gè)項(xiàng)目,建立一個(gè) activity,這里命名這個(gè) activity 為 freeTestActivity。
一般默認(rèn)建立的 AS 項(xiàng)目,默認(rèn)的 activity 名字是 MainActivity。為了簡(jiǎn)單直接運(yùn)行 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 就是默認(rèn) activity 了。
注意前面的 uses-permission 標(biāo)簽。這里申請(qǐng)了網(wǎng)絡(luò)權(quán)限。以確保告知操作系統(tǒng),這個(gè)應(yīng)用需要網(wǎng)絡(luò)訪問(wèn)。
我們的網(wǎng)絡(luò)請(qǐng)求,就設(shè)定為訪問(wèn)“百度”,然后把請(qǐng)求回來(lái)的信息使用提示框顯示一下。
那么在 freeeActivity.kt 文件中的 onCreate 函數(shù)中增加如下代碼
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 是一個(gè)擴(kuò)展函數(shù)。在 class freeTestActivity 內(nèi)實(shí)現(xiàn)。
fun Context.toast(message:CharSequence, duration: Int = Toast.LENGTH_LONG){
Toast.makeText(this, message, duration).show()
}
