这篇文章主要介绍了安卓改造框架的使用,帮助大家更好的理解和学习使用安卓系统,感兴趣的朋友可以了解下
目录
改装介绍
加装优点
加装的使用
1.引入依赖项
2.添加网络权限3.编写加装辅助类
4.定义养蜂服务
5.实现接口方法
加装介绍
加装是平方开源的一款基于OkHttp(也是他家的)封装的网络请求框架,主要的网络请求还是OkHttp来完成,改装只是对OkHttp进行了封装,可以让我们更加简单方便的使用,目前大部分公司都在使用这款框架,改装的原理也是面试必问的问题之一了,所以我们不仅要会使用,也要对其实现原理有一个大概的了解。
本片文章从使用角度来说,不对的地方希望大家在评论区交流,我会及时改进,共同进步,文章中的演示可以从开源代码库下载。
加装优点
加装的大部分配置是通过注解来实现的,配置简单,使用方便;支持多种返回类型包括RxJava和协程,可以配置不同的解析器来进行数据解析,如Json,xml等
加装的使用
以下代码全部为科特林语言编写,毕竟现在科特林也是大势所趋了。
1.引入依赖项
开源代码库地址:github.com/square/retr…
实施" com.squareup.retrofit2:改装:2.9.0"
//支持Gson解析json数据
实现“通讯器。摆好架势。改装2:转换器-gson:2。9 .0"
//支持RxJava返回类型
实现“通讯器。摆好架势。复古适合2:适配器-rx Java 2:2。9 .0"
实现“木卫一。反抗愤怒。rx Java 2:rx Android:2。0 .2"
//支持协程,改造2.6.0及以上版本不需要引入,改装内置已经支持
//实现“通讯器。杰克哈顿。改造:复古适合2-kot林-协程-适配器:0。9 .2"
2.添加网络权限
uses-permission Android:name=' Android。许可。互联网'/
3.编写加装辅助类
首先定义一个翻新助手辅助类,编写加装单例,改装内部已经维护了线程池做网络请求,不需要创建多个
注:基本网址必须为'/' 结尾
对象更新帮助程序{
//baseUrl根据自己项目修改
私有常量val BASE _ URL=' https://www。百度一下。' com '
私有定义变量改造:改造?=空
私人定义变量翻新建筑商:翻新。建筑商?=空
//翻新初始化
fun init(){
if (retrofitBuilder==null) {
val client=OkHttpClient .构建器()。connectTimeout(20,时间单位。秒)。readTimeout(20,时间单位。秒)。writeTimeout(20,时间单位.秒)。构建()
翻新建筑=翻新。构建器()。基本网址(基本网址)
//支持Json数据解析。addConverterFactory(gsonconverterfactory。create())
//支持RxJava返回类型。addCallAdapterFactory(rx Java 2 calladapterfactory。create())。客户(客户端)
}
改装=retrofitBuilder!构建()
}
fun getRetrofit():Retrofit{
如果(翻新==空){
抛出IllegalAccessException(“改型未初始化!')
}
返回改装!
}
}
然后再应用中进行初始化
类应用程序:应用程序(){
覆盖fun onCreate() {
super.onCreate()
RetrofitHelper.init()
}
}
在显示文件中指定应用
应用
android:name=' .应用程序
android:allowBackup='true '
Android:icon=' @ MIP map/IC _ launcher '
Android:label=' @ string/app _ name '
Android:round icon=' @ MIP map/IC _ launcher _ round '
android:supportsRtl='true '
Android:networkSecurityConfig=' @ XML/network _ security _ config '
android:theme='@style/Theme ."改装演示"
活动Android:name=' . 100 '主要活动'
意图过滤器
action Android:name=' Android。意图。行动。主'/
类别Android:name=' Android。意图。类别。启动器'/
/意图-过滤器
/活动
/应用程序
安卓P系统限制了明文流量的网络请求解决的办法有2种1.把所有的超文本传送协议(超文本传输协议的缩写)请求全部改为https请求2.在表示留数的可扩展标记语言目录(),然后创建一个名为:网络安全配置。可扩展标记语言文件
?可扩展标记语言版本='1.0 '编码='utf-8 '?
网络安全配置
允许的基本配置明文流量=' true '/
/网络安全配置
4.定义养蜂服务
首先我们先用一个最简单的得到请求来试一下,这个接口是请求天气情况的,免费的
接口Api {
@ GET(' http://www。天气。com。cn/data/sk/{城市代码} .html’)
fun getWeather(@ Path(' city code ')code:String):ObservableWeatherInfo
}
定义返回类型,为了方便打印,用的数据类类型
数据类天气信息(
var weatherinfo:Info?=null) {
数据类别信息(
定义变量城市:串串?
var cityid:String?
var temp:String?
var WD:字符串?
var WS:字符串?
var SD:字符串?
var AP:字符串?
var njd:字符串?
var WSE:字符串?
定义变量时间:字符串?)
}
首先用@GET注解表示该借口为得到请求,获取注解的价值为请求地址,完整的请求地址为baseUrl值,如价值为完整地址,则会使用价值为请求地址,一般通用情况下base URL='www.weather.com.cn/',然后GET('data/sk/{cityCode}).html ')@路径是网址中的参数,用来替换。
5.实现接口方法
5.1RxJava方法实现
类RetrofitViewModel:ViewModel() {
私人有价一次性用品:由懒人处理的复合材料{
CompositeDisposable()
}
趣味添加一次性用品(d:一次性用品){
一次性用品
}
val weather livedata=MutableLiveDataWeatherInfo()
有趣的天气(){
复古合体帮手。得到改革.创建(Api:class.java).getWeather('101010100 ')。subscribeOn(Schedulers.io())。观察者离子(机器人调度程序。主线程())。订阅(对象:观察气象信息{
覆盖fun onComplete() {}
覆盖订阅资金(d:可支配){
添加一次性用品
}
下次覆盖乐趣(t:天气信息){
weatherLiveData.value=t
}
覆盖fun onError(e:可投掷){
}
})
}
覆盖fun onCleared() {
super.onCleared()
disposables.clear()
}
}
这里是用视图模型中做的操作,如果是最有价值球员模式放在提出者中进行就好,首先通过加装单例调用服务的对象的天气预报方法,指定上下游事件的线程,创建观察者对象进行监听,在onNext方法中拿到返回结果后回调给活动,数据回调用的是LiveData,在活动中操作如下
类主要活动:app compat activity(){
私有val viewModel by viewModelsRetrofitViewModel()
私有var btnWeather: Button?=空
私人var tvWeather: TextView?=空
覆盖fun onCreate(savedInstanceState:Bundle?) {
super.onCreate(保存实例)
setContentView(r . layout。活动_主要)
视图模型。天气实况数据。观察(这个,观察者{
tvWeather?text=it.toString())
})
BTN天气=findviewbyid按钮BTN天气)
电视天气=findViewById(r . id。电视天气)
btnWeather?setOnClickListener {
viewModel.getWeather()
}
}
}
在活动中
1.创建视图模型对象
2.注册LiveData的回调
3.获取天气情况
如下图所示
开源代码库地址:github.com/ZhiLiangT/R…
以上就是安卓改造框架的使用的详细内容,更多关于安卓改造框架的资料请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。