文档章节

android网络通讯数据封装之 json

Stepkim
 Stepkim
发布于 2016/04/26 10:45
字数 534
阅读 23
收藏 1
原文地址:android网络通讯数据封装之 json作者:yihu
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":"123456","name":"rarnu"}}
    //封装代码
         JSONObject headParam = new JSONObject();
         headParam.put("name", "yihu");
         headParam.put("password", "123456");

         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":"123456","name":"yihu"},{"arry1":"java","classid":"321546"}]}
   
   JSONArray headParams = new JSONArray();
   //数组[0]
   JSONObject headParam1 = new JSONObject();
   headParam1.put("name", "yihu");
   headParam1.put("password", "123456");
   //数组[1]
   JSONObject headParam2 = new JSONObject();
   headParam2.put("arry1", "java");
   headParam2.put("classid", "321546");
   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 == 200) {
        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"), 8 * 1024);
    String line = null;
    while ((line = reader.readLine()) != null) {
     sb.append(line + "n");
    }
   } catch (IOException e) {
    sb.delete(0, 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()) != -1)
   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>


本文转载自:http://blog.csdn.net/zhaowei_zhang/article/details/48808805

Stepkim
粉丝 1
博文 19
码字总数 4416
作品 0
东莞
程序员
私信 提问
Android异步下载图片并且缓存图片到本地

在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML资源,其中包括图片,我们要做的解析XML里面的数...

liuher
2014/07/23
55
0
android利用ksoap2实现和webService交互

前言 在android开发过程中,我们有时会遇到android和sop中的webService交互的问题,那么今天就来讲下android用ksoap2实现和webService交互的问题吧 注:MP4转gif地址; 今天涉及的内容有: ks...

奔跑的佩恩
06/20
0
0
Android中个人推崇的数据库使用方式

手机应用开发中经常会使用到数据库存储一些资料或者进行数据缓存,android中为我们提供了一个轻量的数据库,在上层进行了一层封装,同时还为我们提供了ContentProvider的框架,方便我们进行数...

码农明明
2014/10/15
13K
4
图灵问答机器人API调用实例

问答机器人API文档:https://www.juhe.cn/docs/api/id/112 先上图: 说下大致实现的步骤: 1、首先使用了聚合数据的sdk,这样免费使用的数目可以多一些 2、使用gson来解析json数据 3、使用L...

夜晚晚
2016/10/27
375
0
如何选择即时通讯应用的数据传输格式

前言 即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据传输格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。 精略分析一下,大概的原因在于:...

JackJiang-
2016/08/04
586
1

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第5题

choose the best answer The CUSTOMERS table has a CUST_LAST_NAME column of data type VARCHAR2. The table has two rows whose COST_LAST_MANE values are Anderson and Ausson. Which q......

oschina_5359
35分钟前
3
0
电脑怎样制作流程图?分享绘制流程图方法

流程图的绘制可以用很多方法来实现,小编经常使用电脑对流程图进行绘制,即简单又便利,相信很多朋友都因为不知道怎样绘制流程图而选择了放弃,今天这篇文章希望可以让大家重拾绘制流程图的信...

干货趣分享
37分钟前
3
0
Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据...

泥瓦匠BYSocket
40分钟前
4
0
TL665x-EasyEVM开发板处理器、flash、RAM

TL665x-EasyEVM是广州创龙基于SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板,采用核心板+底板方式,底板尺寸为200mm*106.65mm,采用4*50pin和1*80pin B2B工业级连接器,稳...

Tronlong创龙
45分钟前
3
0
DevExpress Report-XRTable绑定数据

将从跳转前的页面(A)中获取传入的数据(dtOrd、BatchID、ModelID),绑定到Report报表对应的控件 ,代码如下: this.xrtBatchID.Text = sBatchID; this.xrtModel.Text ...

_Somuns
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部