从高处理解android与服务器交互(看懂了做开发就会非常的容易)
今天帮一个朋友改一个bug 他可以算是初学者吧 。我给他看了看代码,从代码和跟他聊天能明显的发现他对客户端与服务器交互 基本 不是很了解。所以我花了更多时间去给他讲客户端与服务器的关系。我觉得从这个高度去做客户端开发会对开发的提高有十倍甚至百倍的效果。我希望更多的人能理解更多的人能收到帮助。所以把这个总结了一下发布出来。
首先:我介绍下服务器的一些东西
服务器开发是一门很深的学问不是一句话两句话能理解的,至少比android开发要复杂很多倍,至少想开发好是非常难的。这里只讲android需要理解的概念
服务器这里指的是web 服务器不是具体的机器
服务器 就是一个程序 这个程序 会接收请求 返回响应
简单理解就是一个 处理请求响应的小程序
不好理解 那我具体讲一下
就是 你给服务器一个请求 告诉他你想要的 他就给你一个响应 就是给你你想要的。至于你用什么客户端他不关心的。你用浏览器 他不关心 你用 android手机他不关心 用ipad 其实他也不关心。 你只要有请求 我就给你响应。
什么还不好理解那我再具体下
比如你去商店买个雪糕 给他1块钱 告诉他 我要一个 蒙牛随便雪糕 他就给你一个蒙牛随便雪糕 , 只要他有就会给你,如果他没有就告诉你他没有。这个就是一个请求响应。
下面对号入座
ip 或者url 就是 商店的地址。你得知道去哪买
参数就是 一个蒙牛雪糕的id 在网络里一般是传id就ok了
返回就是给你一个随便雪糕。
至于你是你买 还是你妈妈买 还是你老板 。或者你老板的小秘买 基本是一样的 ,都是会返回你一个雪糕而已 。
总结一下就是。服务器写好了放那就行 ,用浏览器 测试一下,就知道 正不正确了。如果浏览器测试没有问题 一般在客户端发请求都会收到正常的响应。浏览器就是一个客户端,android手机也是客户端。虽然开发服务器很高大上。那是过去。在android 我们关系的就是我的请求会得到响应 具体响应什么 我们会约定好的。
了解了服务器在谈谈android开发
android应用开发一般就两个分支 一个是工具类的可能不是很需要从服务器获取数据
另一个就是浏览型的基本数据都是从服务器获取的。服务器返回什么我就显示什么,具体数据是我们之前约定好的 比如我想要蒙牛随便雪糕 他就会给我,他没给是他的问题,我只要告诉用户说服务器不给就ok了 。
具体开发时候可以绕过浏览器,我设计好接口 然后 设计好返回我就可以做测试了 具体服务器对接其实不会影响我这边的具体问题的。这样开发客户端就非常简单了。在没有服务器的情况下也可以做简单的开发,虽然会比有的时候麻烦一点 但是也是值得推荐的。不要把一切工作推到服务器开发完成。
具体开发流程就非常简单了。
比如我开发一个用户模块。包括登录,注册,修改,获取用户列表,删除用户。典型的crud模式。最典型的整删改查都有了,服务器交互就是简单的整删改查而已。
这里要介绍一个大名鼎鼎的库 google的 gson库。自从用了这个,做交互方便了不是一点半点
gson 支持 从对象 到 json字符串的转换 就一句话 gson。tojson(Object);就完成了即使是集合也没有问题。什么他竟然还支持泛型。简直高大上啊。
至于json 转换成对象就要麻烦一点点 怎么麻烦呢,他需要获取一个Type就是想要转换的实体类的类型 代码如下
Gson gson = New Gson();获取gson对象
Type type = new TypeToken<User>() {}.getType(); 获取转换类型
User user= gson.fromJson(jsonStr, type); 转换成具体对象
什么就两行代码就把json字符串转换层user对象了 什么这个也支持泛型,还支持泛型嵌套。而且效率非常高,速度非常快。简直太高大上了。
了解gson 做开发就方便了,具体流程
登录 我传new 一个user对象转换成 json 字符串 发送给服务器 服务器解析json成user 对象判断用户是否存在 密码是不是正确 告诉我登录是否成功就ok了。
注册道理是一样的 都是发送一个json 而已。
修改用户信息麻烦一点 就是 需要先查询用户信息。想修改就一定要知道修改谁,比如我登录了 肯定会获取一个登录的id 就是用户id 那我想获取我的信息就会发送我的id告诉服务器我要获取信息 服务器就会返回我的信息 服务器返回的是json 字符串 我转换层user对象 然后我会修改 在发给服务器。服务器告诉我是否成功就ok
基本所有的增删改查都是简单的服务器交互而已。其实腾讯新闻 啦。新浪微博啦。团购网站啦 都是可以这样的交互的 。而且非常标准。
你会一个模块其实别的模块 基本都是一摸一样的。只是实体类还了而已可能是 User Student 也可能是 Type 或者是 House 道理都是一样的
从高处理解android与服务器交互(看懂了做开发就会非常的容易)的更多相关文章
- 解决Android与服务器交互大容量数据问题
对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...
- 转载 解决Android与服务器交互大容量数据问题
对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...
- android与服务器交互总结(json,post,xUtils,Volley)
http://www.23code.com/tu-biao-chart/ 从无到有,从来没有接触过Json,以及与服务器的交互.然后慢慢的熟悉,了解了一点.把我学到的东西简单的做个总结,也做个记录,万 ...
- Android和FTP服务器交互,上传下载文件(实例demo)
今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...
- 深入理解Android之Gradle
深入理解Android之Gradle 格式更加精美的PDF版请到:http://vdisk.weibo.com/s/z68f8l0xTYrZt 下载 Gradle是当前非常"劲爆" ...
- 解决初学者学不懂android,不理解android的设计
最近在忙着搞一个小项目,所以没有来得及写一些原创性的东西,好容易今天中秋节,就趁现在写一些吧,今天仍然看了些老马的视频,尽管这些东西以前都用过,但是感觉仍然学到了不少东西,说给大家听希望大家也要不要不 ...
- 20171018 微信小程序客户端数据和服务器交互
-- 时常在想,怎么样才能把知识写的清晰,其实是我理解的不够清晰 微信小程序其实是一个客户端页面,也是需要和服务器交互才能体现数据. 1 --服务器搭建Web API :MVC4 中的一个模板, 如下 ...
- Unity 3D与Android Studio安卓交互之-导出jar包
u3d与安卓 jar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- 《深入理解Android内核设计思想》
<深入理解Android内核设计思想> 基本信息 作者: 林学森 出版社:人民邮电出版社 ISBN:9787115348418 上架时间:2014-4-25 出版日期:2014 年5月 开 ...
随机推荐
- css中font-size的单位总结:px、em、pt
px:基于像素的单位.像素是一种有用的单位,因为在任何媒体上都可以保证一个像素的差别确实是可见的.em :一般用来测量长度的通用单位(例如元素周转的页边空白和填充),当用于指定字体大小时,em单位是指 ...
- python 输出十六进制中文乱码
代码中红色字体为解决方案: #-*-coding:utf-8-* import csv filename='C:\Users\yaru\Desktop\Senti_Value(1).csv' data ...
- Loadrunner进行接口自动化测试
我们以测试豆瓣api获取图书信息的接口为例 接口的信息如下: 接口ip:https://api.douban.com/v2/book/:id 接口返回值:status=200 返回数据: { - (图 ...
- linux系统下,查看端口号被哪个应用占用
netstat -tunlp 会把所有端口和所有对应的程序显示出来. 用grep管道可过滤出来需要的信息.比如,17059端口号被占用了. 第一步:netstat -tunlp | grep 1705 ...
- 15个jQuery小技巧
1.返回顶部按钮通过使用jQuery中的animate 和scrollTop 方法,不用插件就可以创建一个滚动到顶部的简单动画:// Back to top $('.top').click(funct ...
- 享元模式(Flyweight Pattern)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- Ubuntu下安装boost
今天开始安装配置Ubuntu开发环境(Ubuntu 12.04).在干活之前就预计到会遇到很多问题,但是没想到一开始就卡壳,可能是linux中各种包的依赖关系太复杂了,决定写个帖子记录一下,免得以后再 ...
- select,poll,epoll区别
select:忙轮询,一直在轮询,效率跟链接数成反比,资源限制 poll:轮询,不用一直轮询,有事件触发时轮询,资源限制 epoll:有事件触发时直接通知复杂度O(1)
- 使用cocos2d-x3.4结合cocos2.1.5制作小游戏《亲亲小熊》
在最新的cocos集成环境中,CocosStudio已经集成到cocos中了,至于界面的制作和编辑器的基本使用在cocos官网有详细教程, 这里就不细说,资源下载和详情请参看官网教程:http://c ...
- 「LINUX资料」基础命令概览(一)