到这一节,基本上把大部分kotlin
和android
的开发都已经介绍完成了,通过了前面和这一章的框架结构,基本上能解决开发中的很多问题,并且能够知道android
的主要的技术,并进行独立开发了。对于传统的开发的话,还差网络和一个简单的框架。
Retrofit的使用
对于大部分的内容app来说,大概的主要流程是先从服务器中获取逻辑和要展现的数据,通过接口解析这一部分的数据,并展示在手机上。
因此对于获取网络接口的数据,在这类app中显得非常的重要。网络框架的稳定性已否,对一个app的稳定性来说是非常关键的。因此我们也使用了通用的网络框架。
Rxjava + Retrofit
框架
定义api的方法和地址:
interface Api {
@GET("http://www.weather.com.cn/data/sk/{cityCode}.html")
fun getWeather(@Path("cityCode")code:String):Observable<WeatherInfo>
}
初始化 retrofitBuilder
,让他提供一个可用的Retrofit
。
if (retrofitBuilder == null){
val client = OkHttpClient.Builder().connectTimeout(20,TimeUnit.SECONDS)
.readTimeout(20,TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.build()
retrofitBuilder = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
}
这里我们的网络采用的是OkHttpClient
,和Retrofit
配合的非常的完美。
请求接口数据,并在控件中显示:
RetrofitHelper.getRetrofit().create(Api::class.java).getWeather("101010100")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object :Observer<WeatherInfo>{
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(t: WeatherInfo) {
weatherLiveData.value = t
}
override fun onError(e: Throwable) {
TODO("Not yet implemented")
}
override fun onComplete() {
}
})
注意这里的subscribeOn
和observeOn
相当于在不同的线程间做各种事情,subscribe
当出现了数据以后,把数据传递出来。
在view中显示:
viewModel.weatherLiveData.observe(this, Observer {
tvWeather?.text = it.toString()
})
mvp框架
我们这里的这个框架确实是非常简单的,把它分为两部分一部分是model
,一部分是view
,model
用来做数据的处理,而view
用来做显示,这样就可以把数据和界面分开,这就是一种编程思想,一个框架。
虽然现在有很多的不同框架,但是大部分都是这样思路,就是解耦,这样整个程序看起来会非常的清晰。
小结
基础知识就是这些,如果想更多的接触一些android开发的知识,建议去找几个开源的代码,自己做一两个的app,基本上就能掌握app的开发了。