这是我参与「第四届青训营 」笔记创作活动的第四天
本文用于记录在青训营中学习到有关Android网络通信的知识
网络通信是目前互联网发展离不开的一件事,那么在Android中如何做到网络通信的呢?
原生Socket
对于每一种编程语言,其基础库都有与操作系统进行相连的Socket组件,其目的就是通过操作系统来使用各种网络适配器,从而利用网络通信设备(例如无线网卡等)进行网络通信。
不管是Java还是KT都有socket方法,所以我们自然也可以利用Socket去进行网络通信(我就这么干过,不过过程确实及其痛苦的)。但是如果后端服务是按照应用层协议来发送数据(例如Http...),那么使用原生Socket就需要自己去解析数据,其过程不言而喻。
对于Socket编程,其优点就在于性能,只需要发送自己想要发出去的数据,可以不发送多余的数据,缺点就是对接收方要求就有点高。所以在应用开发上,原生Socket并不常见,而在游戏领域Socket相对常见一些。
Android网络组件
上面这张图展示了在Android中常见的网络通信组件。这里就不一一介绍了,这张图说明了很多事情。
Retrofit的使用
在JAVA中使用Retrofit,一般需要搭配异步操作,我这里选择的是RxJava
第一步:引依赖
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
implementation "com.squareup.okhttp3:okhttp:4.10.0"
第二步:写接口
/**
* 请求榜单数据的接口
* @author 徐鑫
*/
public interface IListServer {
/**
* 获取榜单数据
*
* @param type 榜单类型,1-电影,2-电视剧,3-综艺
* @return 异步对象
*/
@GET("discovery/ent/rank/item/")
Observable<ResponseData<ListData>> getListData(@Query("type") Integer type, @Query("version") Integer version);
}
第三步:创建Retrofit对象,并调用接口
Retrofit build = new Retrofit.Builder()
.baseUrl(IP_PRE)
//使用RxJava
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
//使用jackson解析,并且将_格式数据转化为驼峰式
.addConverterFactory(JacksonConverterFactory.create(mapper))
.client(okHttpClient)
.build();
IListServer server = build.create(IListServer.class);
第四步:获取异步对象,并且监听
Observable<ResponseData<ListData>> observable = iListServer.getListData(type, version);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()