Android客户端与服务器端(struts2)通信
来源:互联网 发布:什么是店铺淘宝客 编辑:程序博客网 时间:2024/05/01 19:20
Android客户端向服务器端(struts2框架)发送get或post请求(http),服务器端以json格式返回数据,android客户端解析json数据。
一.服务器端
1. jar包
struts相关jar包以及:
json-lib-2.3-jdk15.jar
struts2-json-plugin-2.3.4.jar
2. struts配置文件
- extends="json-default"
- <result name="success"type="json">
- <param name="includeProperties"> user\.userNo,user\.userName,user\.userKey,userlist\[\d+\]\.userNo,userlist\[\d+\]\.userKey </param>
user为Action类中定义的UserInfo类型对象,userNo、userName、userKey为UserInfo类型对象的属性,userList为List<UserInfo>类型的对象。在Action对应的类中应有user和userList的get和set方法。
<package name="android" extends="json-default" ><action name="logina" class="com.cpm.controler.LoginAction"method="login_a"><result name="success" type="json"><param name="includeProperties">user\.userNo,user\.userName,user\.userKey,userlist\[\d+\]\.userNo,userlist\[\d+\]\.userKey</param></result></action></package>
3. Action对应的类
继承自ActionSupport,提供与struts.xml对应的action方法,在该类中定义UserInfo user和List<UserInfo> userList,并为其生成相应的get和set方法。
public class LoginAction extends ActionSupport {private UserInfo user;private List<UserInfo> userlist;public List<UserInfo> getUserlist() {return userlist;}public void setUserlist(List<UserInfo> userlist) {this.userlist = userlist;}public UserInfo getUser() {return user;}public void setUser(UserInfo user) {this.user = user;}public String login_a() { HttpServletRequest request = ServletActionContext.getRequest();String uno = request.getParameter("name");String key = request.getParameter("key");LoginService ls = new LoginService();user = ls.getUser(uno);userlist = ls.getUserList();if (user.getUserNo().equals(uno)&& user.getUserKey().equals(key)) {return "success";} elsereturn "input";}}
4. 参数接收
使用ServletActionContext.getRequest()获取HttpServletRequest;再使用HttpServletRequest的getParameter("key")方法获取参数。
5. 数据返回格式
{"user":{"userKey":"123","userName":"张三"","userNo":"zhangsan"},
"userlist":[{"userKey":"123","userNo":"zhangsan"},{"userKey":"123","userNo":"lisi"}]}
二.Android客户端
1. AndroidManifest.xml中配置网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
2. 网络访问不能在主线程中进行,需要新开一个线程,当网络访问结束后向Handler发送消息:
Handler定义:
Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1://............break;case 2://............break;}}};
消息发送:
Message msg = mHandler.obtainMessage(1);mHandler.sendMessage(msg);
3. 以get方式发出请求
HttpGet request = new HttpGet(path);HttpClient client = new DefaultHttpClient();HttpResponse response = client.execute(request);
4. 以post方式发出请求
HttpPost request = new HttpPost(path);HttpClient client = new DefaultHttpClient();HttpEntity entity = new UrlEncodedFormEntity(params,"UTF-8");request.setEntity(entity);HttpResponse response =client.execute(request);
params的构建:
List<NameValuePair> params = newArrayList<NameValuePair>();params.add(new BasicNameValuePair("userno", "zhangsan"));
5. JSON数据解析
HttpEntity entity1 = response.getEntity();String resource = EntityUtils.toString(entity1);JSONObject object = new JSONObject(resource);JSONObject ob = object.getJSONObject("user");//获取userob .getString("userName ");//获取userNameJSONArray array = object.getJSONArray("userlist ");//获取userlistarray.getJSONObject(i);//获取list中的JSONObject,i为int型
- Android客户端与服务器端(struts2)通信
- android 客户端与web服务器端通信
- android客户端与c#服务器端的通信
- Android 实现蓝牙客户端与服务器端通信
- android客户端与服务器端socket通信
- Android客户端与Web服务器端Http通信
- 客户端与服务器端通信
- 客户端与服务器端的通信
- 客户端与服务器端的通信
- 服务器端和android客户端通信 服务器端实现
- Android简单的客户端与服务器端通信小程序
- android手机客户端与Tomcat服务器端servlet通信
- Android手机客户端与服务器端的信息通信交互
- Mina长连接框架实现Android客户端与服务器端通信
- Mina长连接框架实现Android客户端与服务器端通信
- C#服务器端与客户端通信(客户端)
- Linux网络编程-客户端与服务器端通信
- 客户端与服务器端通信之Cookie篇
- poj 2352 树状数组
- 兰州烧饼
- matlab获取文件夹中所有图像的方法
- HDU3341 Lost's revenge
- SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP
- Android客户端与服务器端(struts2)通信
- UIViewController 中的 willMoveToParentViewController和didMoveToParentViewController的使用
- ACM从零开始---电子科大POJ "快速排序算法"
- Linux C 进阶过程
- UVA - 434 Matty's Blocks
- 几种开放源码的TCP/IP协议栈比较
- 一个简单的截屏工具的实现
- 理解 Linux 条件变量
- MFC中工作者线程调用状态栏,死掉原因