Android网络通信 | 青训营笔记

108 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第四天

本文用于记录在青训营中学习到有关Android网络通信的知识

网络通信是目前互联网发展离不开的一件事,那么在Android中如何做到网络通信的呢?

原生Socket

对于每一种编程语言,其基础库都有与操作系统进行相连的Socket组件,其目的就是通过操作系统来使用各种网络适配器,从而利用网络通信设备(例如无线网卡等)进行网络通信。

不管是Java还是KT都有socket方法,所以我们自然也可以利用Socket去进行网络通信(我就这么干过,不过过程确实及其痛苦的)。但是如果后端服务是按照应用层协议来发送数据(例如Http...),那么使用原生Socket就需要自己去解析数据,其过程不言而喻。

对于Socket编程,其优点就在于性能,只需要发送自己想要发出去的数据,可以不发送多余的数据,缺点就是对接收方要求就有点高。所以在应用开发上,原生Socket并不常见,而在游戏领域Socket相对常见一些。

Android网络组件

image.png

上面这张图展示了在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()