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

作者:小菜 更新时间:2025-03-16 点击数:
简介:在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么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 下一篇:

郑武公从小不受宠爱,为什么能登上王位?

郑武公的父亲郑桓公在王二十二年的时候才被他的哥哥封为诸侯,才拥有了自己人生当中名正言顺的第一块儿封地。

郑桓公在自己管辖封地内和老百姓们的关系处理的挺不错,治理国家有一套方法,总之就是比当时的王法子还多,受到了自己领地中的老百姓的深深的爱戴。

郑桓公在后来的之战当中战死,他的儿子崛突因为战事迫不得已将他的尸骨草草地葬在了华山脚下,随即就保护着向东迁徙至安全无战火狼烟地带。

崛突也是护王有功,公元前771年崛突继承了郑桓公的爵位担任司徒一职。

崛突在与西戎打仗的过程中表现突出,勇猛不犹豫,得到了申侯的青睐,申侯当时就有把崛突收入自己手中纳他为婿的想法。

申侯也是个的老狐狸,当时的西戎军队事实上是他带进来的,他们不仅杀了,也让郑桓公去往了。

如果崛突认死理往上追根溯源查罪证的话,申侯也是逃脱不了干系的,申侯害怕实力逐日强大的崛突会找自己算账,就想起来用和崛突建立姻亲关系的方法来化解矛盾。

最初崛突也是接受不了这门亲事的,那可是杀父之仇啊,但碍于申侯与周王室的特殊关系,自己又是才得到周平王的重用不久,硬着头皮答应下了申侯的条件,不过他尽力把婚期往后拖了数十年,时间一长他的恨意也没有以前那么浓了,到崛突年过三十后才娶了申侯的女儿武姜。

在以前那个提倡早生早育男子十五六岁就结婚,他的年龄都可以做爷爷的年代,他成了晚婚晚育的楷模。

再后来崛突成为了郑国的第二代国君世称郑武公,他与武姜一同孕育了两个儿子。

武姜在生第一胎的时候遭遇难产,孩子的脚朝下先出来了,这一下子可把没生过孩子的武姜给吓坏了,“寤生”有难产的意思,我们中国人自古以来父母给孩子起名字都会把自己对孩子的祝愿与期待包含在名字当中,而武姜直接给她刚生出来的小宝宝起了一个贼难听意思贼不好不好的名字,就是将含有难产之意的“寤生”作为宝宝人生的第一份礼物——名字送给了小宝宝。

武姜与郑武的第二个儿子也出生了,武姜生第二个儿子的时候过程非常顺利,给他起名为共叔段。

武姜念及寤生当初差点让自己命丧黄泉就气不打一处来,她把所有的爱都给她的小儿子共叔段,给了寤生超级不公平的待遇。

寤生就是在武姜整日不满的情况下长大的。

寤生有治国之才,但武姜全凭个人心情来办事,她整天在郑武公耳边碎碎念,想让郑武公把储君的位置给了共叔段,可郑武公可是个明君,不会那么容易被武姜左右的。

他最终还是把国君之位传给了寤生即郑庄公。

寤生已经坐上国君的宝座了,可他仍然不得武姜的喜欢。

武姜心疼自己的小儿子共叔段,想替共叔段求得一块好的封地,她第一就相中了制地,那制地可是军事险要之地,郑庄公果断地拒绝了武姜的这个无理的要求,声称除了制地之外,其他的封地随便让共叔段选他都会给,最后武姜为共叔段请的京邑,共叔段去了京邑被称为京城大叔。

这时候郑庄公的臣子祭仲就按捺不住进言了,他认为封给诸侯的都城过大了容易滋长不良因素,封给诸侯最大的封地也不能超过国都,中等城池也得是国都得五分之一,小城池得是国都的九分之一。

,现在给共叔段的京邑已不符合先祖规定,恐怕未来共叔段实力超越郑庄公。

郑庄公觉得母命难违,没有将城池收回。

后来公子吕又询问他打算怎么处理共叔段,让庄公小心注意以防民生二心,庄公劝告公子吕淡定不要慌,说共叔段迟早会惹火烧身。

共叔段贪心地一次一次将周围小城纳入自己的囊中,子封也有些坐不住了,郑庄公依然淡定从容。

最后共叔段聚集兵甲,与武姜和共叔段两人里应外合,准备攻打自己哥哥的都城,郑庄公对自己的母亲与弟弟失望透了,派子封带领军队去打共叔段,共叔段所在的京邑的老百姓也发生了叛乱,最终共叔段被打到出奔至共。

郑庄公将武姜放置鄢陵,并发下毒誓说不到黄泉之下不相见。

可郑庄公说完就后悔了,可君王的话哪能说完就变。

郑庄公与母亲矛盾爆发的事传了出去。

有颍谷人颍考叔前来进言,用自身事例来感动郑庄公,郑庄公将自己后悔的事实告诉给了颍考叔。

颍考叔给郑庄公支招在地底挖隧道直至有泉水,让母子二人在隧道相见,郑庄公听从了他的话,命人挖了隧道与武姜见面,母子二人的关系得到了缓和,郑庄公的忧虑解决了。

郑武公从小到大不被宠爱,却靠着自己的能力,登上王位逆袭成功。

随机文章汉武麾下李陵力战匈奴之可信度中国未来第六代战斗机详解,5780公里每小时超越导弹速度土星为什么不能住人,温度太低仅-130.15℃(表面为液态气体)中国突破20倍音速导弹,6806米/秒1小时绕地球一圈(无法证实)赤道为什么没有台风,原因其实很简单/赤道地转偏向力几乎为零

小李子玩水枪是什么梗?一切要从一把水枪说起

小李子玩水枪是什么梗(一切要从一把水枪说起)铁打的小李,流水的维密。

”其实对莱昂纳多认知的的改变,还要从一把水枪说起。

手持水枪的小李子在草地上奔跑,快乐得像个孩子一样,这样的画面不禁令人感叹“打败一个男人很简单,只需要一把水枪。

”本以为莱昂纳多经过这次放纵后会重回巅峰,但没想到的是,事情似乎变得越发不可收拾了……早期莱昂纳多出演的角色大多是以“不良少年”这一形象为主,主要原因还是他的颜值就是那种痞帅风,从而能够更好更完美的和角色融合在一起。

之后因出演《泰坦尼克号》风靡全球,成为全球女性的白马王子。

其交往的女友据传有58位之多,其中维密天使更是占据小李子恋爱史的“半壁江山”,因此莱昂纳多也获得了新的称号“维多利亚没有秘密,维密收割机。

”不知道大家有没有这种感觉,看小李子的电影总有一种他和其他人演的不是一场戏的感觉,他演他的,其他人演其他人的,其他人在这个过程中完全是在catch小李子的节奏。

他们只是在“演戏”,而小李子却是在演戏中做自己,从而形成了这种很不协调的感觉。

二、“李奥纳多”至于为什么叫莱昂纳多·迪卡普里奥为“小李子”,那纯属是影迷观众们的恶趣味了,莱昂纳多的中文译名可以译为“李奥纳多”,再加上早期莱昂纳多多次与奥斯卡影帝失之交臂之后,“小李子”这一称呼也就由此诞生了。

起初看这部电影的时候我并不知道这是一部“同性”电影,影片讲述一位年轻诗人兰波“莱昂纳多饰演”和法国象征派诗人魏尔伦的故事。

两个诗人就这样结合了,他们一起看夕阳,一起面对大海相拥。

印象最深的还是魏尔伦的离开,小李子这一幕看哭了多少人?#p#分页标题#e#近期,46岁的小李子再次出现在人们的视野中,可以看出在防护方面小李子还是很注重的。

搭配方面,上身黑色羽绒服搭配白色上衣和灰色长裤,简单时尚。

可惜莱昂纳多还是没有摆脱男人中年发福这个可怕的“魔咒”,仔细一看竟还有一点撞脸“高晓松”的感觉,不得不说男人中年发福真的是一个硬伤。

加入收藏
               

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

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录