在 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
作者:厚土火烟
链接:https://www.jianshu.com/p/499c79aef3c1
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于