众所周知的原因,Android的主线程是不能处理网络请求的,我们从后端拿数据就只能放在异步线程里面处理。我看了一下现在很多模板性的代码,大家基本都还是使用Handler或者是RxJava处理这种异步问题,然后使用Callback接口返回成功的结果或者是失败的Error值。可以理解这种处理方式,毕竟大家都用了多年,也是熟能生巧了。
我之前也是这样做的,但现在使用了Kotlin开发Android之后,发现结合协程再结合高阶函数的方式写回调更好看,下面我举一个例子,从百度词条上请求得到一个String类型的文本,然后显示在TextView上面。
毫无疑问,这是需要使用到IO线程的,所以这里使用lifecycleScope.launch(Dispatchers.IO)开启一个协程作用域。具体代码如下显示:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SixthActivity">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEditText"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:hint="在这里写点东西进行请求"
android:textAlignment="center"
app:layout_constraintBottom_toTop