Android从服务器端获取数据的几种方法

【菜科解读】
在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有
一:基于Http协议获取数据方法。
二:基于SAOP协议获取数据方法,三:忘了-------
那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。
那么,接下来我们便开始这一路程:
首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目,技术配备为:android+SSH。
当然,篇幅有限,我这里就直接用Strtus2而已。
服务器端:新建WebProject ,选择Java ee 5.0.
为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去):
1: xwork-core-2.2.1.1.jar
2: struts2-core-2.2.1.1.jar
3: commons-logging-1.0.4.jar
4: freemarker-2.3.16.jar
5: ognl-3.0.jar
6: javassist-3.7.ga.jar
7:commons-ileupload.jar
8:commons-io.jar
9:json-lib-2.1-jdk15.jar 处理JSON格式数据要使用到
10:struts2-json-plugin-2.2.1.1.jar 基于struts2的json插件
以上的jar包,需要放在WebRoot/WEB-INF/lib目录下
然后在web.xml文件中敲下:
View Code
?xml version="1.0" encoding="UTF-8"?>struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*index.jsp
然后编写struts.xml文件,并放在WebRoot/WEB-INF/lib目录下:如下代码:
View Code
?xml version="1.0" encoding="UTF-8"?>"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">
配置好后,我们再根据标签内容来编写action。
方法为method对应的login,类名为loginAction,
注意:包继承为:json-default ,输出结果类型为json
如下:
View Code
public class loginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {/*** */private static final long serialVersionUID = 1L;HttpServletRequest request;HttpServletResponse response;public void setServletRequest(HttpServletRequest request) {this.request=request;}public void setServletResponse(HttpServletResponse response) {this.response=response;}public void login(){ try {//HttpServletRequest request =ServletActionContext.getRequest();// HttpServletResponse response=ServletActionContext.getResponse();this.response.setContentType("text/html;charset=utf-8");this.response.setCharacterEncoding("UTF-8");if(this.request.getParameter("username").equals("123456")){this.response.getWriter().write("真的很奇怪,日本人!");}else if(this.request.getParameter("username").equals("zhd")){this.response.getWriter().write("没有错,我就是东子哥!");}else{this.response.getWriter().write("我就是东子哥!");}//将要返回的实体对象进行json处理 // JSONObject json=JSONObject.fromObject(this.getUsername()); //输出格式如:{"id":1, "username":"zhangsan", "pwd":"123"} // System.out.println(json); // this.response.getWriter().write(json.toString());/**JSONObject json=new JSONObject(); json.put("login", "login");response.setContentType("text/html;charset=utf-8");System.out.println(json);byte[] jsonBytes = json.toString().getBytes("utf-8");response.setContentLength(jsonBytes.length);response.getOutputStream().write(jsonBytes);**//**JSONObject json=new JSONObject(); json.put("login", "login");byte[] jsonBytes = json.toString().getBytes("utf-8");response.setContentType("text/html;charset=utf-8");response.setContentLength(jsonBytes.length);response.getOutputStream().write(jsonBytes);response.getOutputStream().flush();response.getOutputStream().close(); **/ } catch (Exception e) { e.printStackTrace();}// return null;}}
运行查看下:http://localhost:8080/PDAServer/login.action?username=123456 当然你可以输入其他参数的URL
运行成功。
客户端:
这里需要注意的是模拟器把自己当成了localhost,以及127.0.0.1了,因此如果基于本地的web项目测试的话,必须修改IP为:10.0.2.2
public class MainActivity extends Activity {/** Called when the activity is first created. *///模拟器自己把自己当成localhost了,服务器应该为10.0.2.2private static String url="http://10.0.2.2:8080/PDAServer/login.action";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);getPDAServerData(url); }/*** 请求服务* @param url*/private void getPDAServerData(String url){url+="?username=123456";HttpClient client=new DefaultHttpClient();HttpPost request; try {request = new HttpPost(new URI(url));HttpResponse response=client.execute(request);//判断请求是否成功if(response.getStatusLine().getStatusCode()==200){HttpEntity entity=response.getEntity();if(entity!=null){String out=EntityUtils.toString(entity);new AlertDialog.Builder(this).setMessage(out).create().show();}}}catch (URISyntaxException e) {e.printStackTrace();}catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }
运行结果如下:
成功了吧:当然读者可以根据这个思路扩展下应用,比如:struts2+hibernate+spring+json。
数据方面可以用json,也可以使用xml。
android已经提供了JSON的API,struts2中也可以使用JSON插件.自己扩展吧。
Android,从,服务器,端,获取,数据,的,几种,方法, 上一篇:浏览器经典动画和新动画函数requestAnimationFrame 下一篇:从法属印度支那到入侵柬埔寨 当地人是如何争取国家独立的
法国人最初也是派传教士到柬埔寨来传教,以窥视和了解柬埔寨的情况,为下一步的殖民侵略做准备。
法国在柬埔寨的殖民侵略过程不同于越南,没有发生过大规模的侵略战争,而是采取武力胁迫的办法来夺取权力。
1863年,法国驻交趾支那总督德·拉·格朗地耶以武力威胁强迫柬埔寨新国王诺罗敦在一份事先拟好的保护条约上签字,条约确定了法国对柬埔寨的保护权。
起初柬埔寨国王为了摆脱越南、泰国的控制,幼稚地把希望寄托在法国人的身上,这无疑是引狼入室。
就这样,法国人在柬埔寨没有遇到多少抵抗,两国就签订了《法柬条约》,柬埔寨接受法国的保护,开始沦为法国的。
暹罗是柬埔寨的保护国,法国人为了安抚暹罗,1867年与暹罗签订条 约,将柬埔寨的暹粒、马德望、诗梳风三省割让给暹罗,以换取暹罗对《法柬条约》的承认。
当年,柬埔寨把首都从安东迁到了金边。
法国人并不满足于1863年的《法柬条约》,1884年又故技重演,法国驻交趾支那总督查尔斯·汤普森用刺刀对着柬埔寨国王诺罗敦的喉咙,逼迫他签订另一个不平等条约。
根据该条约,法国获得了几乎全部在柬埔寨的政治权力,柬埔寨完全沦为法国的殖民地。
柬埔寨的实际事务由法国指派的首席殖民官员负责。
法国人侵占柬埔寨是其构建法属印支联邦的一部分,1887年在已占领的越南分为东京、安南、交趾支那三个区域的基础上,加上柬埔寨共四地拼凑成法属“印度支那联邦”。
1941—1945年日本短暂占领了柬埔寨。
其间,泰国得到日本人的支持,趁法国人顾不上柬埔寨之际,出兵占领了柬埔寨的西部地区。
法国人甚至与泰国人在东京签订条约,将柬埔寨的马德 望、暹粒两省以及磅同、上丁两省的部分地区割让给泰国。
1945年8月15日,日本宣布无条件投降,法国伞兵10月5日占领金边,法国人,恢复了对柬埔寨的殖民统治。
同时,泰国也宣布自动放弃所占领的柬埔寨领土。
为了稳住柬埔寨,1946年法国与柬埔寨签订了一项协定,法国承认柬埔寨是法兰西联邦内的一个自治国,但国王所签的一切文件都要经过法国的批准才有效。
其实,换汤不换药,柬埔寨跟过去一样依然是法国彻头彻尾的殖民地。
在法国占领和实施殖民统治的岁月里,柬埔寨人就一直开展反抗斗争,争取国家的独立。
由于在越南战场的接连败退,再无力支撑下去,法国只好于1953年7月3日宣布给予柬埔寨完全独立,11月9日柬埔寨在金边皇宫举行仪式,法国正式把权力移交给以西哈努克为首的柬埔寨王国。
1954年,根据日内瓦协议,法国最后撤走了驻守在柬埔寨的军队,柬埔寨实现了真正的独立。
随机文章古罗马皇帝德修斯简介诸葛亮怎么死的?专家反覆研究后「只说4字」解释了一切黔南平塘天坑群风景区,世界上最大口径的天坑(1800米)秦始皇地宫被盗过吗,秦始皇地宫藏万吨水银无人敢挖(剧毒)揭秘西安活死人墓有多深,王重阳曾在这里修仙得道(腾飞之地)
如此一个重要又不缺人才的大省 为什么从未出过一位帝王呢
这些皇帝来自中国各地,几乎涵盖了大多数省份,其中不少地方上的小政 权,尽管没有真正统一中原,但好歹也算是过了一把皇帝瘾,然而,令人费解的是,有一个大省,历史上却从未出现过一位皇帝。
这个省份就是山东,简称“鲁”,省会是济南,在建立之前,商的始祖契都于蕃,相土东都在泰山下,山东西南部曾是商部落的活动中心,也是商王朝统 治的中心区域之一,商朝初期曾八次迁都,其中前两次都是在山东境内,由此可见,很早的时候,山东就已经是个非常重要的地方了。
可能有的朋友会问了,谁说山东没出过皇帝,不就是称过帝吗,历史上确实是有过这么一回事,不过,尽管黄巢称帝了,但他只是个反贼,而且当时他所处的长安还属于的统 治,并没有独立的地区政 权,所以不能算做皇帝。
不过,话说回来,山东虽然从未出过皇帝,但是将相王侯可是出过很多,诸如历史上赫赫有名的、、、、等人,他们可都是来自山东,所以,山东绝对是个人杰地灵的地方。
然而,为什么如此一个重要又不缺人才的大省,却在历史上从未出过一位皇帝呢?究其原因,主要还是因为山东曾经出现过一位大人物,他对中国乃至世界都产生过极为深远的影响。
这个人不是别人,他就是鼎鼎大名的儒家学派创始人,一位来自山东曲阜的“圣人”,尽管孔子生前并没有得到重用,一展抱负,更是沦落到教学生糊口,但自从听从董仲舒的意见,实行“,独尊儒术”的 统 治思想以后,孔子的地位便正式确立起来。
尤其是古代的读书人,基本上个个尊奉孔子为师,而儒家提出的“君君臣臣、父父子子”的思想也渐渐深入人心,成为历代统 治者的利器,甚至直到今天,我们在课堂上依然要背诵《论语》。
不过,也正是因为孔子的影响力太大了,所以,才会导致山东出不了皇帝,这话又怎么说呢?想必大家都知道,在古代要想当皇帝,最直接的做法就是造 反,聚集一帮底层百姓揭竿起 义,打下一片江上后自然就能称帝了。
可山东是什么地方?这里是孔子的故乡啊,世世代代深受孔子“”的熏陶,人文气息远远重于其他地方, ,这种思想在山东地区传播开来,并逐渐改变了当地人的思想认知。
正因为如此,古代的山东人时刻想的都是如何为国尽忠,入朝为官,把自己毕生所学献给国家,成为“学成文武艺,卖与帝王家”的典范,自然也就很少有人去做造 反称帝的事了,虽然关于山东没出过皇帝还有其他的说法,不可否认的是,孔子思想在当地造成的影响肯定是最主要的因素。
随机文章西沙群岛蓝洞夺得世界第一,深度300.89米秒杀各国蓝洞最有观赏性的悬崖跳水,从58米悬崖跳入水中腿骨脱臼俄现木乃伊狗震惊考古学家,12400年的木乃伊狗脑保存完好恐惧魔王迪亚波罗,勾引王子占据身体和灵魂(天堂最大敌人)地球的伤疤东非大裂谷,世界大陆上最大的断裂带(长6千公里/深2000米)