45. (android開(kāi)發(fā))主線程以外執(zhí)行網(wǎng)絡(luò)請(qǐng)求

在 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()
    }
2017-12-13-11-19-33-556_com.cofox.mykt.mykfa.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請(qǐng)注明出處:http://eddy.wiki/interview-androi...
    eddy_wiki閱讀 3,380評(píng)論 0 20
  • 0.Android手機(jī)操作系統(tǒng)的四層架構(gòu)? Applications , Application Framewor...
    lucas777閱讀 8,153評(píng)論 0 16
  • 內(nèi)容來(lái)之網(wǎng)絡(luò),因?yàn)榭吹讲季痔珌y,重新整理下,并對(duì)答案做了一些修改。如果有侵權(quán),請(qǐng)給我私信。謝謝。 1.下列哪些語(yǔ)句...
    蝴蝶之夢(mèng)天使閱讀 1,699評(píng)論 2 22
  • 2017. 05.08 太久沒(méi)有看電影了 大概2年前看了《活著》的小說(shuō),看完以后并沒(méi)有很深很深的震撼,大概是已經(jīng)認(rèn)...
    木一山閱讀 420評(píng)論 0 0
  • □丘豸 四 那幾年,是我的老師人生最為難忘的一段。老師教過(guò)化學(xué),物理,也教過(guò)美術(shù)和音樂(lè)。尤其是教音樂(lè),讓老師的才華...
    丘墨豸閱讀 878評(píng)論 14 35

友情鏈接更多精彩內(nèi)容