用Android搭建客户端 手机和服务器交互开发实例
2012-05-14 15:10
711 查看
2011-03-28 17:24 Jclick JavaEye 我要评论(12) 字号:T | T
本文介绍了如何使用Android搭建客户端,实现手机和服务器的交互。让我们了解如何采用SSH框架,把服务器端的信息用JSON的形式发送到手机端。
AD:
笔者以前是学的Java EE,由于项目需要要开发Android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。
首先在服务器端,我采用的是SSH框架,struts 2集合了JSON插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts 2,所以我就用装了一个JSON插件。这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端。以下是代码:
首先,在服务器端搭建好SSH框架,具体细节就不在陈述。struts.xml配置如下:
手机端的代码如下:
首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
然后是User实体类,主要用于保存用户信息:
最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常过瘾。同时对Android的兴趣大大提升,它也没有我们想象中的那么难。
本文介绍了如何使用Android搭建客户端,实现手机和服务器的交互。让我们了解如何采用SSH框架,把服务器端的信息用JSON的形式发送到手机端。
AD:
笔者以前是学的Java EE,由于项目需要要开发Android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。
首先在服务器端,我采用的是SSH框架,struts 2集合了JSON插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts 2,所以我就用装了一个JSON插件。这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端。以下是代码:
首先,在服务器端搭建好SSH框架,具体细节就不在陈述。struts.xml配置如下:
<packagename="login"extends="json-default"> <actionname="login"class="com.jclick.test.LoginAction"method="login"> <resulttype="json"><paramname="includeProperties">result</param></result> </action> </package> <packagename="login"extends="json-default"> <actionname="login"class="com.jclick.test.LoginAction"method="login"> <resulttype="json"><paramname="includeProperties">result</param></result> </action> </package>
手机端的代码如下:
首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
packagecom.jclick.cache; importcom.jclick.bean.User; publicclassCache{ privateUserUser; privateCache(){ } /**构造单例*/ privatestaticclassCacheHolder{ privatestaticfinalCacheINSTANCE=newCache(); } publicCachegetInstance(){ returnCacheHolder.INSTANCE; } publicUsergetUser(){ returnUser; } publicvoidsetUser(UserUser){ this.User=User; } } packagecom.jclick.cache; importcom.jclick.bean.User; publicclassCache{ privateUserUser; privateCache(){ } /**构造单例*/ privatestaticclassCacheHolder{ privatestaticfinalCacheINSTANCE=newCache(); } publicCachegetInstance(){ returnCacheHolder.INSTANCE; } publicUsergetUser(){ returnUser; } publicvoidsetUser(UserUser){ this.User=User; } }
接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
packagecom.jclick.protocol; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.HttpClient; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importorg.json.JSONException; importorg.json.JSONObject; publicclassBaseProtocol{ privateStringBuildersb=newStringBuilder(); privateHttpClienthttpClient; privateHttpPosthttpRequest; privateHttpResponseresponse; privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>(); BaseProtocol(){ httpClient=newDefaultHttpClient(); } /** *向服务器端发送请求 * *@paramurl *@throwsException */ protectedvoidpack(Stringurl)throwsException{ httpClient=newDefaultHttpClient(); httpRequest=newHttpPost(url); httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair)); response=httpClient.execute(httpRequest); } /** *得到返回数据 * *@paramurl *@return *@throwsException */ protectedvoidparse()throwsException{ //TODO状态处理500200 if(response.getStatusLine().getStatusCode()==200){ BufferedReaderbufferedReader2=newBufferedReader( newInputStreamReader(response.getEntity().getContent())); for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2 .readLine()){ sb.append(s); } } } /** *向服务器发送信息 * *@paramkey *@paramvalue */ publicvoidaddNameValuePair(Stringkey,Stringvalue){ nameValuePair.add(newBasicNameValuePair(key,value)); } /** *返回JSONObject对象数据模型 * *@return *@throwsJSONException */ publicJSONObjectgetJSON()throwsJSONException{ returnnewJSONObject(sb.toString()); } } packagecom.jclick.protocol; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.HttpClient; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importorg.json.JSONException; importorg.json.JSONObject; publicclassBaseProtocol{ privateStringBuildersb=newStringBuilder(); privateHttpClienthttpClient; privateHttpPosthttpRequest; privateHttpResponseresponse; privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>(); BaseProtocol(){ httpClient=newDefaultHttpClient(); } /** *向服务器端发送请求 * *@paramurl *@throwsException */ protectedvoidpack(Stringurl)throwsException{ httpClient=newDefaultHttpClient(); httpRequest=newHttpPost(url); httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair)); response=httpClient.execute(httpRequest); } /** *得到返回数据 * *@paramurl *@return *@throwsException */ protectedvoidparse()throwsException{ //TODO状态处理500200 if(response.getStatusLine().getStatusCode()==200){ BufferedReaderbufferedReader2=newBufferedReader( newInputStreamReader(response.getEntity().getContent())); for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2 .readLine()){ sb.append(s); } } } /** *向服务器发送信息 * *@paramkey *@paramvalue */ publicvoidaddNameValuePair(Stringkey,Stringvalue){ nameValuePair.add(newBasicNameValuePair(key,value)); } /** *返回JSONObject对象数据模型 * *@return *@throwsJSONException */ publicJSONObjectgetJSON()throwsJSONException{ returnnewJSONObject(sb.toString()); } }
接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
packagecom.jclick.protocol; importorg.json.JSONObject; importcom.jclick.bean.User; publicclassLoginProtocolextendsBaseProtocol{ privatefinalstaticStringURL="http://localhost:8080/test/login"; publicbooleancheckLogin(Userusr){ try{ pack(URL); parse(); JSONObjectobj=this.getJSON(); if(obj.getString("result").equals("failed")){ returnfalse; }else{ returntrue; } }catch(Exceptione){ e.printStackTrace(); returnfalse; } } } packagecom.jclick.protocol; importorg.json.JSONObject; importcom.jclick.bean.User; publicclassLoginProtocolextendsBaseProtocol{ privatefinalstaticStringURL="http://localhost:8080/test/login"; publicbooleancheckLogin(Userusr){ try{ pack(URL); parse(); JSONObjectobj=this.getJSON(); if(obj.getString("result").equals("failed")){ returnfalse; }else{ returntrue; } }catch(Exceptione){ e.printStackTrace(); returnfalse; } } }
然后是User实体类,主要用于保存用户信息:
packagecom.jclick.bean; publicclassUser{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } } packagecom.jclick.bean; publicclassUser{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } }
最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
privatevoidcheckedData(){ username=((EditText)findViewById(R.id.username)).getText().toString(); password=((EditText)findViewById(R.id.password)).getText().toString(); Useruser=newUser(); user.setUsername(username); user.setPassword(password); LoginProtocollogin=newLoginProtocol(); booleanresult=login.checkLogin(user); if(result){SpiderCache.getInstance().setUserSession(user); Toast.makeText(getApplicationContext(),"登录成功",1000).show(); Intentintent=newIntent(); intent.setClass(LoginActivity.this,WelcomeActivity.class); startActivity(intent); }else{Toast.makeText(LoginActivity.this,"密码或用户名不匹配,请重新输入!",1000).show(); } } privatevoidcheckedData(){ username=((EditText)findViewById(R.id.username)).getText().toString(); password=((EditText)findViewById(R.id.password)).getText().toString(); Useruser=newUser(); user.setUsername(username); user.setPassword(password); LoginProtocollogin=newLoginProtocol(); booleanresult=login.checkLogin(user); if(result){ SpiderCache.getInstance().setUserSession(user); Toast.makeText(getApplicationContext(),"登录成功",1000).show(); Intentintent=newIntent(); intent.setClass(LoginActivity.this,WelcomeActivity.class); startActivity(intent); }else{ Toast.makeText(LoginActivity.this,"密码或用户名不匹配,请重新输入!",1000).show(); } }
以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常过瘾。同时对Android的兴趣大大提升,它也没有我们想象中的那么难。
相关文章推荐
- 用Android搭建客户端 手机和服务器交互开发实例
- Android搭建客户端,实现手机和服务器的交互
- Android开发:客户端与服务器通过传递和接收json数据进行交互
- Android从零单排之手机客户端http获取Web服务器数据实例
- Android客户端与PC服务器通过socket进行交互实例
- Android开发——本机Tomcat搭建服务器,客户端socket网络连接不上问题以及D-LINK端口转发设置
- Android开发使用json实现服务器与客户端数据的交互功能示例
- Android客户端与PC服务器通过socket进行交互实例(转)
- Android开发实例-Android平台手机新闻客户端
- Android开发中客户端与内测服务器交互失败
- 实例详解快捷搭建Android手机开发平台
- Android开发一客户端与服务器交互(登陆功能)
- Android客户端与PC服务器通过socket进行交互实例
- android手机客户端连接服务器实现交互
- 用Android搭建客户端&nbsp;手机和服务器…
- android 客户端和web服务器交互----为网站开发Android客户端
- Android之使用HttpPost提交数据到服务器(Android手机客户端和后台服务器交互)
- 智能点餐系统开发纪实1-----java服务器搭建,android客户端实现通信
- Android客户端与PC服务器通过socket进行交互实例
- Android客户端和php+mysql+apache搭建的服务器之间的简单交互