Android进阶之与服务器通信“OKHTTP”

写在前边

大家好,这里是 「小密圈」Android 进阶系列教程。版权归「Android 技术小密圈」公众号所有,欢迎大家关注、转载。我个人觉得 Android 进阶教程只有发布者亲自实践过,才会给大家带来最好的学习体验。而且这些 Android 进阶案例都是我在企业项目中总结出来的,尽量用最少的 Coding 写出可实现的功能。那么现在开始今天进阶学习。

初学 Android 的小伙伴们是不是每天还在仿照「imitate」书上或者视频上做一些可视化的 Demo 功能呢?功能是要坚持练习的,我建议初学者也尝试着学点安卓进阶的知识,会让你有很大的提升「promote」的。

当时我也是从懵懂无知的初学者过来的,理解大家的感受「feeling」,自己也深有体会。对安卓与服务器的交互心里有点慌慌的感觉。其实与服务器的交互没那想象么难,更何况使用网络通信框架,使初学者更容易上手了。

学习之前,我分享「share」一下当时我学习网络通信时的懵逼状态「state」。我之前只按照 Android 书籍和视频跟着做一些本机的功能 Demo,并没有涉及「involving」到 Android 与服务器的通信「communication」。

起初,老师还跟我说现在安卓网络通信都用 OKHTTP 通信框架了,框架的封装使代码更加简洁易懂「understand」,我就开始在 Google 搜索关于 okhttp 的资料,我们可以发现有很多,但是对于我这个初学者来说,服务器怎么通信的都不知道,更何况这些框架了。我只有硬着头皮拿着别人服务器做数据通信实验。 服务器链接:「 https://www.lewei50.com/」

我当时使用了这个服务器「我可不是来打广告『advertising』的,当时无意发现的,正好有个项目要做,用到了这个服务器」,这个服务器一方面可做硬件「hardware」开发的,另一方面提供了软件的开发接口,我们可以按照官网的文档封装数据格式「该服务器使用的JSON数据进行通信」就行了。如果不知道JSON数据的可以先去学习一下JSON的解析和封装,封装的话下面我会给大家讲到。我会用最简单易懂的方式展现给初学者。

1. 在build中加入okhttp,Gson的架包,修改build.gradle(app)中加上:

2. 在AndroidManifest中增加请求网络的权限

3.在 MainActivity 创建okhttp对象,设置为全局(以下操作都围绕该对象来做的)

4.对该对象进行封装

「里边携带往服务器发送的相关参数『如果不是自己服务器参考该服务器开发文档』和URL『服务器提供的接口API』」

该网站的 API 「强调:要学会看开源网站的 Api 接口」文档为:https://www.lewei50.com/dev/apiinfo/3

我们就以上传两个数据为例子「example」进行练习:上传之前要做的准备工作是注册账号,简单的添加一个设备「equipment」就可以了,参考:https://www.kancloud.cn/lewei50/lewei50-usermanual/380554 你可以先用官网提供的api测试工具测试之后再来用 Android 上传数据就很容易明白了。

我们通常看到别人的 okhttp上传都是用到的FormEncodingBuilder 可以简单理解为表单的形式,代码如下「了解一下就可以了,我们用另一种方式封装」:

FormEncodingBuilder builder = new FormEncodingBuilder ();builder.add("username","admin");builder.ass("password","123");Request request =newRequest.Builder() .url(https://mp.csdn.net/) //该服务器的api(URL) .addHeader("userkey","2312333321323") //头部标识(不需要可去掉) .post(builder.builde()) .build();executeRequest(request);

我今天就教给大家用List和Map做封装:

我们都知道网络通信的格式大多数Json数据,我们要利用map和List的结合打包成Json数据。

我们要上传服务器的数据格式「如下图」:

我们通过List和Map的结合把数据封装以上这个形式。

详解:在Json数据中一个{}里的内容就称为一个对象,{"Name":"T1","Value","1"}称为一个对象,我们将这个对象数据以Map键值对类型存到map1中,同理将第二个Json对象存放到map2中去,map1、map2就可以封装成 {"Name":"T1","Value","1"},{"Name":"01H1","Value","96.2"}的形式,我们可以清楚的看到两个{}对象最外层还包含着一个[]的括号,我们就可以将[]用List来表示,那List存放的数据类型是什么呢?不明思义,当然是{}两个json对象咯,{}两个对象用map封装的,所以List中存放着Map类型的数据,我们可以这样声明并添加:

经过以上的层层封装,我们终于把数据封装成想要的样子,简单总结一下,{ } 的数据用 Map 键值对进行封装,而 [ ]

Json 数组形式用 List 封装,最后那 List 转化成 JsonArray 数组形式就可以得到想要的数据了!

注意:如果Json数据只由 { } 对象形式封装成的,我们可以将 map 转化成 JsonObject 对象,然后将 JsonObject 妆化成字符串上传服务器!

经过上边的讲解你是否可以封装任意Json数据了呢?

5.对服务器响应返回的数据结果做处理

「简单的理解就是,你给服务器传数据,服务器要返回一个JSON数据做应答,提醒你 Android 端你上传的数据是否成功获取了,服务器回应的JSON数据内容和格式都规定好了,返回成功的JSON数据格式就是『如下图』」。

我已经源代码上传到了 Github上,文件名为「 OKHTTP_Demo 」。

https://github.com/luxiangqiang/AndroidDemo.

推荐阅读:Android 进阶之绘制趋势图

一个不甘平凡的码农

Not an ordinary code farmer

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180518G0T8EG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券