网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > 服务器教程 > android与服务器交互的应用怎么设计
商业源码 服务器教程 2024-02-06 11:30:02

android与服务器交互的应用怎么设计

android与服务器交互的应用怎么设计,第1张

  笔者以前是学的Java EE,由于项目需要要开发Android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。 转载

  首先在服务器端,我采用的是SSH框架,struts 2集合了JSON插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts 2,所以我就用装了一个JSON插件。这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端。以下是代码:

  首先,在服务器端搭建好SSH框架,具体细节就不在陈述。strutsxml配置如下:

  <packagename="login"extends="json-default">

  <actionname="login"class="comjclicktestLoginAction"method="login">

  <resulttype="json"><paramname="includeProperties">result</param></result>

  </action>

  </package>

  

  <packagename="login"extends="json-default">

  <actionname="login"class="comjclicktestLoginAction"method="login">

  <resulttype="json"><paramname="includeProperties">result</param></result>

  </action>

  </package>

  手机端的代码如下:

  首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:

  packagecomjclickcache;

  

  importcomjclickbeanUser;

  

  publicclassCache{

  

  privateUserUser;

  

  privateCache(){

  

  }

  /构造单例/

  privatestaticclassCacheHolder{

  privatestaticfinalCacheINSTANCE=newCache();

  }

  publicCachegetInstance(){

  returnCacheHolderINSTANCE;

  }

  publicUsergetUser(){

  returnUser;

  }

  publicvoidsetUser(UserUser){

  thisUser=User;

  }

  

  }

  

  packagecomjclickcache;

  

  importcomjclickbeanUser;

  

  publicclassCache{

  

  privateUserUser;

  

  privateCache(){

  

  }

  /构造单例/

  privatestaticclassCacheHolder{

  privatestaticfinalCacheINSTANCE=newCache();

  }

  publicCachegetInstance(){

  returnCacheHolderINSTANCE;

  }

  publicUsergetUser(){

  returnUser;

  }

  publicvoidsetUser(UserUser){

  thisUser=User;

  }

  

  }

  接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:

  packagecomjclickprotocol;

  

  importjavaioBufferedReader;

  importjavaioInputStreamReader;

  importjavautilArrayList;

  importjavautilList;

  

  importorgapachehttpHttpResponse;

  importorgapachehttpNameValuePair;

  importorgapachehttpclientHttpClient;

  importorgapachehttpcliententityUrlEncodedFormEntity;

  importorgapachehttpclientmethodsHttpPost;

  importorgapachehttpimplclientDefaultHttpClient;

  importorgapachehttpmessageBasicNameValuePair;

  importorgjsonJSONException;

  importorgjsonJSONObject;

  

  publicclassBaseProtocol{

  privateStringBuildersb=newStringBuilder();

  

  privateHttpClienthttpClient;

  privateHttpPosthttpRequest;

  privateHttpResponseresponse;

  

  privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>();

  

  BaseProtocol(){

  httpClient=newDefaultHttpClient();

  }

  

  /

  向服务器端发送请求

  

  @paramurl

  @throwsException

  /

  protectedvoidpack(Stringurl)throwsException{

  httpClient=newDefaultHttpClient();

  httpRequest=newHttpPost(url);

  

  httpRequestsetEntity(newUrlEncodedFormEntity(nameValuePair));

  response=httpClientexecute(httpRequest);

  }

  

  /

  得到返回数据

  

  @paramurl

  @return

  @throwsException

  /

  protectedvoidparse()throwsException{

  //TODO状态处理500200

  if(responsegetStatusLine()getStatusCode()==200){

  

  BufferedReaderbufferedReader2=newBufferedReader(

  newInputStreamReader(responsegetEntity()getContent()));

  for(Strings=bufferedReader2readLine();s!=null;s=bufferedReader2

  readLine()){

  sbappend(s);

  }

  }

  }

  

  /

  向服务器发送信息

  

  @paramkey

  @paramvalue

  /

  publicvoidaddNameValuePair(Stringkey,Stringvalue){

  nameValuePairadd(newBasicNameValuePair(key,value));

  }

  

  /

  返回JSONObject对象数据模型

  

  @return

  @throwsJSONException

  /

  publicJSONObjectgetJSON()throwsJSONException{

  returnnewJSONObject(sbtoString());

  }

  

  }

  

  packagecomjclickprotocol;

  

  importjavaioBufferedReader;

  importjavaioInputStreamReader;

  importjavautilArrayList;

  importjavautilList;

  

  importorgapachehttpHttpResponse;

  importorgapachehttpNameValuePair;

  importorgapachehttpclientHttpClient;

  importorgapachehttpcliententityUrlEncodedFormEntity;

  importorgapachehttpclientmethodsHttpPost;

  importorgapachehttpimplclientDefaultHttpClient;

  importorgapachehttpmessageBasicNameValuePair;

  importorgjsonJSONException;

  importorgjsonJSONObject;

  

  publicclassBaseProtocol{

  privateStringBuildersb=newStringBuilder();

  

  privateHttpClienthttpClient;

  privateHttpPosthttpRequest;

  privateHttpResponseresponse;

  

  privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>();

  

  BaseProtocol(){

  httpClient=newDefaultHttpClient();

  }

  

  /

  向服务器端发送请求

  

  @paramurl

  @throwsException

  /

  protectedvoidpack(Stringurl)throwsException{

  httpClient=newDefaultHttpClient();

  httpRequest=newHttpPost(url);

  

  httpRequestsetEntity(newUrlEncodedFormEntity(nameValuePair));

  response=httpClientexecute(httpRequest);

  }

  

  /

  得到返回数据

  

  @paramurl

  @return

  @throwsException

  /

  protectedvoidparse()throwsException{

  //TODO状态处理500200

  if(responsegetStatusLine()getStatusCode()==200){

  

  BufferedReaderbufferedReader2=newBufferedReader(

  newInputStreamReader(responsegetEntity()getContent()));

  for(Strings=bufferedReader2readLine();s!=null;s=bufferedReader2

  readLine()){

  sbappend(s);

  }

  }

  }

  

  /

  向服务器发送信息

  

  @paramkey

  @paramvalue

  /

  publicvoidaddNameValuePair(Stringkey,Stringvalue){

  nameValuePairadd(newBasicNameValuePair(key,value));

  }

  

  /

  返回JSONObject对象数据模型

  

  @return

  @throwsJSONException

  /

  publicJSONObjectgetJSON()throwsJSONException{

  returnnewJSONObject(sbtoString());

  }

  

  }

  接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:

  packagecomjclickprotocol;

  

  importorgjsonJSONObject;

  

  importcomjclickbeanUser;

  

  publicclassLoginProtocolextendsBaseProtocol{

  

  privatefinalstaticStringURL="http://localhost:8080/test/login";

  

  publicbooleancheckLogin(Userusr){

  try{

  pack(URL);

  parse();

  JSONObjectobj=thisgetJSON();

  if(objgetString("result")equals("failed")){

  returnfalse;

  }else{

  returntrue;

  }

  }catch(Exceptione){

  eprintStackTrace();

  returnfalse;

  }

  }

  

  }

  

  packagecomjclickprotocol;

  

  importorgjsonJSONObject;

  

  importcomjclickbeanUser;

  

  publicclassLoginProtocolextendsBaseProtocol{

  

  privatefinalstaticStringURL="http://localhost:8080/test/login";

  

  publicbooleancheckLogin(Userusr){

  try{

  pack(URL);

  parse();

  JSONObjectobj=thisgetJSON();

  if(objgetString("result")equals("failed")){

  returnfalse;

  }else{

  returntrue;

  }

  }catch(Exceptione){

  eprintStackTrace();

  returnfalse;

  }

  }

  

  }

  然后是User实体类,主要用于保存用户信息:

  packagecomjclickbean;

  

  publicclassUser{

  privateStringusername;

  privateStringpassword;

  publicStringgetUsername(){

  returnusername;

  }

  publicvoidsetUsername(Stringusername){

  thisusername=username;

  }

  publicStringgetPassword(){

  returnpassword;

  }

  publicvoidsetPassword(Stringpassword){

  thispassword=password;

  }

  

  }

  

  packagecomjclickbean;

  

  publicclassUser{

  privateStringusername;

  privateStringpassword;

  publicStringgetUsername(){

  returnusername;

  }

  publicvoidsetUsername(Stringusername){

  thisusername=username;

  }

  publicStringgetPassword(){

  returnpassword;

  }

  publicvoidsetPassword(Stringpassword){

  thispassword=password;

  }

  

  }

  最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:

  privatevoidcheckedData(){

  username=((EditText)findViewById(Ridusername))getText()toString();

  password=((EditText)findViewById(Ridpassword))getText()toString();

  

  Useruser=newUser();

  usersetUsername(username);

  usersetPassword(password);

  LoginProtocollogin=newLoginProtocol();

  booleanresult=logincheckLogin(user);

  

  if(result){SpiderCachegetInstance()setUserSession(user);

  ToastmakeText(getApplicationContext(),"登录成功",1000)show();

  Intentintent=newIntent();

  intentsetClass(LoginActivitythis,WelcomeActivityclass);

  startActivity(intent);

  }else{ToastmakeText(LoginActivitythis,"密码或用户名不匹配,请重新输入!",1000)show();

  }

  }

  

  privatevoidcheckedData(){

  username=((EditText)findViewById(Ridusername))getText()toString();

  password=((EditText)findViewById(Ridpassword))getText()toString();

  

  Useruser=newUser();

  usersetUsername(username);

  usersetPassword(password);

  LoginProtocollogin=newLoginProtocol();

  booleanresult=logincheckLogin(user);

  

  if(result){ SpiderCachegetInstance()setUserSession(user);

  ToastmakeText(getApplicationContext(),"登录成功",1000)show();

  Intentintent=newIntent();

  intentsetClass(LoginActivitythis,WelcomeActivityclass);

  startActivity(intent);

  }else{ ToastmakeText(LoginActivitythis,"密码或用户名不匹配,请重新输入!",1000)show();

  }

  }

  以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常过瘾。同时对Android的兴趣大大提升,它也没有我们想象中的那么难。

webapp:用html

css

和js开发的运行在

服务器端

的app;

Native

app:根据

手机系统

的默认开发语言开发的app

hybrid

app:基于两者之间的app

而你在问题里说的webapp本身就是一个用手机访问的网站,部署在服务器端,不需要安装,直接通过浏览器访问的,如果是需要安装的app,可以

百度一下

后面两种,你应该就会明白了。

C/S模式和B/S各有其有点也各有其缺点,B/S模式在开发中需要考虑数据如何从客户端提交到服务器端,数据又如何返回到客户端,这些是B/S模式所特有的,在去年之前,开发B/S模式的程序,我都是利用form来交互数据,当我看到XML之后,发现XML是个好冬冬,有很多优点,有好的东西当然不能独享啦,想当年为了实现XML交互数据,几乎把网络翻了个遍。咚,一块砖头上来了。呵呵,废话少说,下面我们就进入正题。

B/S模式分为服务器端和客户端,客户端接受用户的请求,客户端向应用服务提出请求,应用服务从数据库服务中获得数据,应用服务将数据进行计算并将结果提交给客户端,客户端将结果呈现给用户。这样,我们就看到了数据从客户到服务器,经过服务器的处理再返回到客户端,由客户端软件(如IE)显示结果。

(以ASP教本语言为例,其它的语言一样哈。)

1.Form方式

Form方式是最基本的向服务器提交数据的方式。

testasp文件代码:

<%@ Language=VBScript %>

<%

ResponseExpires=-1

ResponseCharSet="UTF-8"

SessionCodePage="65001"

%>

<form name="frmTest" id="frmTest" action="testasp" method="POST">

<input name="name" id=" name" type="text" value="">

<input type="hidden" name="number" id="number" value="10">

<input type="submit" value="Submit" name="B1">

</form>

<%

dim intnumber

dim strname

if IsEmpty(Request("name")) then

strname =""

else

strname =Request("name")

end if

if IsEmpty(Request("number")) then

intnumber =0

else

intnumber =Request("number")

end if

具体步骤如下:

1,浏览器登陆网站首页,鼠标右键—查看网页源代码;

2,在打开的源代码中搜索查看generator,后面所跟内容为当前论坛版本号,搜索查看Content-Type,后面所跟内容为当前论坛编码类型。

3,登陆opencom后台,点击应用管理,选择您需要对接的APP应用;

4,点击网站对接菜单,下载插件对应论坛版本以及编码的插件。目前我们提供dz32、dz31和dz25的gbk和utf8两种类型,以及phpwind87版本;如需对接其它版本,可联系客服,选择好后接着点击提交。

5,点击下载,下载完后,请将解压后的文件cbhook上传到您论坛根目录下然后在浏览器中键入(你的论坛网址/cbhook/indexphp进行安装)

6,在论坛上运行安装插件,只有全部权限为可写才能安装,如果某个权限为不可写,请注意修改(权限修改请联系服务器提供商或者咨询我司技术人员)。安装完毕后回到opencom管理后台进行后面的操作。

7,输入您网站域名,注意域名开头需要加“http://+您的论坛网址”;点击创建中央桥(请确保你的论坛程序安装在根目录下,如果放在特定文件夹中,请打开cbapi_configphp修改文件中论坛程序文件夹路径)。

8,,中央桥创建成功后进入频道对应设置环节,左边板块为程序抓取到的论坛板块;右边为所创建应用频道;在下拉框中选择您应用中所需要与论坛板块对接的频道,选好后点对接;也可以点新建频道对接,系统自动会在应用中生成一个与您论坛板块名字一样的应用频道(新生成的频道图标、介绍、权限设置等可在对接好后自行在频道设置中再修改);频道对应设置好后,点击开启同步,看到“启动中”绿色文字则为中央桥对接成功。

服务器端 服务器 数据 客户端 论坛
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » android与服务器交互的应用怎么设计

商业源码 钻石

分享到:
上一篇
云主机的优缺点是什么呢
下一篇
IBM服务器售后条款

相关推荐

云服务服务器哪个好

云服务服务器哪个好

什么是高防服务器,为什么需要高防服务器

什么是高防服务器,为什么需要高防服务器

梦幻西游中最嚣张的服战队到底有多强?

梦幻西游中最嚣张的服战队到底有多强?

mysql数据库表里中文乱码应该选哪种编码?

mysql数据库表里中文乱码应该选哪种编码?

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...