android网络通讯数据封装之 json
Demo程序包括客户端和服务端
客户端按json数据格式封装数据传至服务端。
服务端为简单的servlet程序,负责接收客户端传到json数据,然后按原数据返回客户端.
实例代码如下:
public static String cmdLogIn() {
String urlString = "http://192.168.8.75:89/webroot/jsontest";
HttpPost request = new HttpPost(urlString);
try{
//json数据格式{"data":{"spring":"yes","java":"ok"},
"head": {"password":"","name":"rarnu"}}
//封装代码
JSONObject headParam = new JSONObject();
headParam.put("name", "yihu");
headParam.put("password", "");
JSONObject dataParam = new JSONObject();
dataParam.put("java", "ok");
dataParam.put("spring", "yes");
JSONObject paramss = new JSONObject();
paramss.put("head", headParam);
paramss.put("data", dataParam);
//json数据格式
{"data":[{"spring":"yes","java":"ok"}],
"head":[{"password":"","name":"yihu"},{"arry1":"java","classid":""}]} JSONArray headParams = new JSONArray();
//数组[0]
JSONObject headParam1 = new JSONObject();
headParam1.put("name", "yihu");
headParam1.put("password", "");
//数组[1]
JSONObject headParam2 = new JSONObject();
headParam2.put("arry1", "java");
headParam2.put("classid", "");
headParams.put(headParam1);
headParams.put(headParam2); JSONArray dataParams = new JSONArray();
JSONObject dataParam = new JSONObject();
dataParam.put("java", "ok");
dataParam.put("spring", "yes");
dataParams.put(dataParam); JSONObject paramss = new JSONObject();
paramss.put("head", headParams);
paramss.put("data", dataParams); Log.v("tag", "params.toString() >>> :"+paramss.toString());
// 绑定到请求 Entry
StringEntity se = new StringEntity(paramss.toString());
request.setEntity(se);
// 发送请求
HttpResponse httpResponse = new DefaultHttpClient().execute(request);
int statusCode = httpResponse.getStatusLine().getStatusCode();
Log.v("tag", "statusCode <- :"+statusCode);
if (statusCode == ) {
InputStream entityStream;
try {
entityStream = httpResponse.getEntity().getContent();
String jsonString = convertStreamToString(entityStream);
Log.v("tag", "jsonString <- :"+jsonString);
if ("".equals(jsonString))
return null;
JSONObject json = new JSONObject(jsonString);
JSONObject head = json.getJSONObject("head");
Log.v("TAG", "name >> :"+head.optString("name")); return json.optString("java");
}catch (Exception e) {
}
}
}catch (Exception e) {
}
return null;
} private static String convertStreamToString(InputStream is) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"), * );
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "n");
}
} catch (IOException e) {
sb.delete(, sb.length());
} finally {
try {
is.close();
} catch (IOException e) { }
}
return sb.toString();
}
服务端测试代码
public class LoadServlet extends HttpServlet {
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringBuffer messagebuffer = new StringBuffer();
javax.servlet.ServletInputStream in = request.getInputStream();
DataInputStream din = new DataInputStream(in);
int ch;
while ((ch = din.read()) != -)
messagebuffer.append((char) ch);
din.close();
String message = messagebuffer.toString();
System.out.println("content...>>>:" + message);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(bout);
byte str[] = message.getBytes("UTF-8");
dout.write(str);
byte data[] = bout.toByteArray();
OutputStream out = response.getOutputStream();
out.write(data);
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
public void init() throws ServletException {
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>jsontest</description>
<display-name>jsontest</display-name>
<servlet-name>jsonServlet</servlet-name>
<servlet-class>com.yihu.json.servlet.LoadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jsonServlet</servlet-name>
<url-pattern>/jsontest</url-pattern>
</servlet-mapping>
</web-app>
android网络通讯数据封装之 json的更多相关文章
- android 网络通讯
//get方式请求网络数据 String urlPath="http://192.168.98.112:8080/CloudMusicPlayer/fragment1_1_lv2/json/ ...
- 网络通讯数据.传输json(java<==>C#)
ZC:主要是测试解决 时间转成JSON不一样的问题 ZC:java中转换时间格式的关键是“JSONUtils.getMorpherRegistry().registerMorpher(new Date ...
- [置顶] android网络通讯之HttpClient4不指定参数名发送Post
在HttpClient4之前都是通过List<NameValuePair>键值对的形式来向服务器传递参数 ,在4.0版本中在加入了不指定参数名发送数据的形式,利用StringEntity来 ...
- 网络--三种网络通讯方式及Android的网络通讯机制
Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别介绍这些接口的功 ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android开发之从网络URL上下载JSON数据
网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...
- Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)
最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所 ...
- Android网络框架Volley(体验篇)
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
随机推荐
- select函数的简单使用
server: socket()->bind()->listen()->FD_SET()->select()->accept()->FD_SET()->sel ...
- iOS移动支付——支付宝支付
这篇博客总结得很好,我只对在iOS上集成支付宝做简洁的步骤总结. http://www.it165.net/pro/html/201402/9376.html iOS集成支付宝支付的步骤: 准备工作的 ...
- std::string转化大小写(C++)
#include <string> #include <algorithm> void test() { std::string strA="QQQQWWWqqqqq ...
- Android 如何修改自动同步数据的默认开关 M
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- sql按in中集合排序
1.SELECT * from tbLabelResRelation WHERE lId in(32,18,27,19) order by FIND_IN_SET(lId ,'32,18,27,19' ...
- Cocos2d-x 学习之路------(CCCallfunc 系列)
CCCallFunc,CCCallFuncN,CCCallFuncND,CCCallFuncO类都是调用函数来执行动作,他们的使用只是局限于他们调用的的函数的参数不同而不同 CCCallFunc的回调 ...
- ubuntu下lamp环境配置及将window代码迁移至linux系统
因为最近要用需要去实现项目中的一个功能,比较好的做法就是在http://i.cnblogs.com/EditPosts.aspx?opt=1linux中实现.所以最近就将自己的代码全部迁移到linux ...
- android 用 XML 自定义边框(只上下边框有色)
直接上代码: <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android ...
- linux经常使用(一)linux 安装配置 jdk之 找不到安装文件文件夹及source /etc/profile 报unexpected end of file 错误 解决
linux 安装配置 jdk 应该算是一个非常主要的东西.可是我到如今才自己第一次 正式安装.果然出现了问题.. 问题就是 安装之后 找不到 安装路径 ,进而没法配置环境变量. 现象例如以下: 提示 ...
- 2014年辛星解读Javascript之DOM之冒泡和捕获
上篇博客提到了Javascript事件绑定函数的三个參数.第一个是一个event.第二个是一个function.第三个是一个布尔变量.它用于指定事件传递的顺序,分为冒泡和捕获两种方式,接下来我们将揭开 ...