首页 > 代码库 > 小猪的Android入门之路 Day 8 part 4
小猪的Android入门之路 Day 8 part 4
小猪的Android入门之路 Day 8 part 4
Android网络编程浅析——Android网络数据的上传
——转载请注明出处:coder-pig
本节引言:
在part 3中我们已经学习了Android网络数据的下载,难点是多线程断点续传下载;
有下载,当然也有上传啦,本节就来研究下Android中的网络数据的上传!
1.使用GET或者Post方式上传数据给服务器
2.使用开源框架HttpClient上传数据到服务区
3.发送xml数据给服务器
4.通过Http协议上传文件
5.WebService平台的了解以及简单应用
好了,开始本节的内容吧!
本节学习路线图
注意:在查询城市天气那个demo中可以不适用地区码,直接发送城市名即可!
正文:
使用GET方法或者POST方法上传数据
核心代码比较:
GET服务类:
POST服务类:
ps:相信细心的朋友都看出来这两个服务类不同的地方了,get是直接发送请求的,而post还需要设置相关的参数,
最后是以流的方式提交数据的!
完整项目下载:http://pan.baidu.com/s/1qWobnvm
效果图:
ps:另外还要说一点的是,传递中文可能出现乱码的情况,笔者之前也在这里纠结了半天,改来改去还是不行,后来发现是自己
的myeclpise的问题,上述运行结果是到同学的电脑运行的结果,乱码的话是因为tomcat默认支持的事iso8859-1编码方式
下面提供两个简单的解决乱码问题的方法(其实更重要的是注意编码的统一!!!)
1.在servlet取出数据的时候,使用下述代码进行转码:
修改后:(utf-8不行的话再改成gbk试试)
ps:如上述方法都不行的话,就可能是tomcat的问题了,建议别直接使用myeclpise提供的tomcat;自己下载个tomcat配置下
如果还是乱码;去别人电脑试试,如果可以就说明是编译器的问题了;如果还是不行的话,我也帮不了你了
使用开源框架HttpClient发送请求:
核心代码:(直接使用httpClient发送post请求)
代码使用示例:
用户向某个jsp页面发送请求,如果没登陆的话返回提示没有没有权限访问页面;
点击登录后,验证账号密码是否正确,正确的话弹出Toast信息,并显示服务端反馈的内容
服务端使用到了session,相信学过jsp的同学都知道,可以通过这个判断用户是否为登录状态!
这里就直接套用疯狂讲义中的demo
效果图:
代码下载:http://pan.baidu.com/s/1kTgJRxX
核心代码解析:
①服务端如何判断用户是否登录?
答:点击登录按钮指向的是login.jsp,在这里完成登录,同时把状态写入到session
session.setAttribute("user" , name);
同时在该页面中匹配账号密码是否正确,否则返回不同的结果,成功或者失败!
当我们点击访问页面,请求指向的事secret.jsp页面,该页面先取出session中的name对应的值
与"jay"进行匹配,有的话,根据判断结果返回不同的处理结果:
<%Object user = session.getAttribute("user");
if(user != null && user.toString().trim().equals("jay"))....%>
else{out.println("您没有被授权访问该页面");}%>
②客户端提交请求,解析响应结果:
// 创建一个HttpGet对象 HttpGet get = new HttpGet("http://10.13.20.32:8080/foo/secret.jsp"); // 发送GET请求 HttpResponse httpResponse = httpClient.execute(get); //获得服务器反馈的结果 HttpEntity entity = httpResponse.getEntity(); if (entity != null) { // 读取服务器响应 BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent())); String line = null; while ((line = br.readLine()) != null) { Message msg = new Message(); msg.what = 0x123; msg.obj = line; handler.sendMessage(msg); }
发送xml数据给服务器:
和前面的差不多,这里只贴核心业务代码,要用的时候直接复制即可!
使用Http协议完成文件上传操作:
相信大家在使用app的时候,都要完成一个注册用户的流程,而注册的时候,通常都是需要
用户上传图片作为自己的用户头像的,这里提供一个使用Http协议完成文件上传的业务代码:
另外,一般使用http上传的文件比较小,通常是小于2M的!
实现代码解析:Android使用http协议上传mp3
Android平台调用WebService
WebService的简单介绍:
ps:如果上面看完还是对WebService不是很了解的话,就算了,笔者没弄过WebService,所以也不知道!
而现在我们要做的不是去讨论如果去搭建一个WebService,我们要做的是去获得WebService提供的服务!
然后解析返回的xml数据,把这些数据显示到安卓手机上,简单的小例子如:输入手机号码,获取手机归属地;
查询某地的天气预报,快递单号查询等!
那么我们要怎么去获得这些服务呢?
首先我们去找到提供webService的一些网站:(笔者知道的有以下这两个,如果有免费的站点,欢迎提出)
①WebXML:http://www.webxml.com.cn/zh_cn/web_services.aspx
也是使用得最多的一个WebService站点,貌似以前是免费的,不过都商业化了,当然是可以试用!不过次数有限!
该网站上提供了16个不同的web服务,可以按照自己的需求,查询自己需要的服务,调用不同的接口即可!
相关使用次数:
②云聚36wu:http://www.36wu.com/Service
同样也提供了很多的服务,很多手机的app都是用的这里的接口,比如彩虹公交,手机天气等
不过,这个也是要收费的=-=,可以试用,不过只能一小时内发送20次请求;
点击申请使用,获得key就可以了!两者随便选一个吧!鉴于笔者是学生狗,没什么收入来源,
后期可能会研究下如何搭建自己的WebService,毕竟现在有那么多云平台!敬请期待
好了,有了获取服务的站点后,接着就要开始我们app的开发了,由于篇幅关系,这里就简单的演示
下查询号码归属地和天气情况的流程吧,其他的以后根据需求再进行研究!
使用示例:根据手机号码获得归属地与天气情况
step 1:下载第三方jar包:ksoap2 Android:
首先如果想在Android平台上调用WebService需要依赖于第三方类库:ksoap2
而在Android平台上,使用的是ksoap2 Android,一个高效,轻量级的SOAP开发包!
jar包下载地址:https://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2
鉴于是google的网站,天朝墙了,可能上不去,这里给出百度云的下载链接:
备用胎:3.30版本:http://pan.baidu.com/s/1i3sZksl
2.54版本:http://pan.baidu.com/s/1jGoTyQi
如果所幸你能进入jar包的下载地址的话,那么你会看到下面的界面:
step 2:记录相关参数:
在开始实际操作之前,我们先要从WebService获取一些信息:分别是:NameSpace(命名空间),SoapAction以及URL
URL就不用说了,其他参数这样找:
然后就可以获取我们需要的SoapAction和namespace了
好了,先把这两个mark下来,接着要测试下自己所在地区的地区码了,在theCityCode:输入所在的城市
下面的id可以不填,因为我们用的是免费用户,接着到达下一个界面,可以看到:
同样的,我们还要做一个号码归属地查询的,所以还要获取号码查询的Service的SoapAction与命名控件:
step 3:开始我们代码的编写了:
效果图:
源码下载:WebService的使用demo
工程核心解析:
一.记得把Android soap2的jar包导入到工程中!不然会提示相关类找不到的!
二.核心代码的编写:
①获取号码所属地的Activity
②获取某城市(这里是江门)的天气情况
ps:相信细心的朋友都会发现这里用了两个不同的webservice站点,一个是webxml一个是36wu;
其实呢一开始都是用的webxml,但是,笔者的运气真是背,刚好遇到了天气查询服务维护,
笔者即使使用申请使用id,也是返回"...现在不支持普通用户,...申请id",所以就用了36wu的!
其实都差不多,改起来也是比较简单的,根据站点的soap改下相关参数即可:
另外,别忘了,添加Internet权限哦!在AndroidManifest.xml文件中添加下述权限:
<uses-permission android:name="android.permission.INTERNET"/>
总结:
本文的内容还是比较多的,但是都不难,很多只要我们大概明白原理,然后到用的时候
知道怎么去改就可以了!笔者也写了几天才写完的!如果你能坚持看完的话,相信你会收获
很多,另外文章篇幅较长,希望读者可以耐心读完,写这么详细是想照顾一些和我一样的迷途
小菜鸟,望体谅,好了,本节就到这里!谢谢你们的支持另外,现在大部分的WebService站点
都是要收费的,笔者穷屌买不起会员,只能试用试用了,以后进公司就不用自己给钱了!
不过大牛说可以自己搭建个WebService服务器,以后有时间会尝试弄一个,然后把经验分享
给大家的,毕竟现在各种云,阿里云,腾讯云,搜狐云景...好了,最后贴下申请试用key的流程吧!
有兴趣的再看吧!
==============可以不看==================================================
附录:
一.webxml申请试用id:
注册账号
登陆账号,查看自己的key
点击我的web服务,可以看到相关的服务,这里笔者开通了天气查询的,试用五天:
这里的是要给钱的,所以说起其它的6个服务是免费的,比如我们的号码归属地查询...
接着我们来到weather服务那里,输入地区编码以及我们的key,就可以查询天气了:
噔噔噔,接着就可以看到信息了,我们就可以在我们的应用中解析这些数据了~!
二.36wu的key的申请与使用流程:
相比webxml就抠门很多了,人家起码可以使用5个服务,一个服务5天,5*5=25
而36wu的key只能用一天,也不能说扣吧,商家都要赚钱!一天就一天,也可以爽一下啦!
同样是需要申请key的
接着会收到一条短信=-=,把key复制下即可
接着同样来到wetherservice的界面:输入地区码和key
返回结果,接着就到我们的客户端进行处理了:
小猪的Android入门之路 Day 8 part 4