开发者社区> 光仔december> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【Android开发】JSON格式传送网络信息

简介:
+关注继续查看

根据上一个案例:http://blog.csdn.net/acmman/article/details/38755237

下午又写了关于安卓网络传输的另外一种方法,采用JSON格式进行网络信息传递并解析。

 

用的WEB应用与Android客户端都是在上一个样例的基础上改写的。

 

WEB应用端

Servlet有所变化

package deu.hpu.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import deu.hpu.servise.dima.News;
import deu.hpu.servise.impl.VideoNewsService;
import deu.hpu.servise.impl.VideoNewsServiceImpl;
 
public class ListServlet extends HttpServlet {
    private VideoNewsService service=new VideoNewsServiceImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        doPost(request,response);
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
           List<News> videos=service.getLastNews();
           //得到请求参数
           String format=request.getParameter("format");
           //如果是以json的请求参数,就以就向客户端返回json格式的数据,否则就返回XML格式的数据
           if("json".equals(format)){
        	   StringBuilder builder=new StringBuilder();
        	   builder.append('[');
        	   for(News news:videos){
        	    builder.append('{');
        	    builder.append("id:").append(news.getid()).append(',');
        	    builder.append("title:\"").append(news.getTitle()).append("\",");
        	    builder.append("timelength:").append(news.getTimelength());
        	    builder.append("},");
        	   }
        	   builder.deleteCharAt(builder.length()-1);
        	   builder.append(']');
        	   request.setAttribute("json", builder.toString());
        	   request.getRequestDispatcher("/WEB-INF/Page/jsonvideonews.jsp").forward(request, response);
           }
           else{
        	   request.setAttribute("videos", videos);
               request.getRequestDispatcher("/WEB-INF/Page/videonews.jsp").forward(request, response);  
           } 
}
 
}


相应的,在WEB-INF/Page下创建了新的JSP文件,用来接受request带过来的json数据,并描述成json数据的格式

相比XML格式的,json属于普通文本格式。代码很简单:

<%@ page language="java" import="java.util.*" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}

完成,之后在地址栏输入

http://10.20.124.72:8080/videonews/ListServlet?format=json

注意:后面必须加?format=json,不然无法以json格式输出数据!!

 

效果:


Android客户端:

 

我们在VedioService业务类中新增getJSONLastNews() 与parseJSON()两个方法,用来得到json数据和解析json数据以 List形式返回

/*
 * 获取最新的视频资讯
 * */
     public static List<News> getJSONLastNews() throws Exception{
    	 String path="http://10.20.124.72:8080/videonews/ListServlet?format=json";
    	 URL url=new URL(path);
         HttpURLConnection conn=(HttpURLConnection) url.openConnection();
    	 conn.setConnectTimeout(5000);
    	 conn.setRequestMethod("GET");
    	 if(conn.getResponseCode()==200){
    	  InputStream instream=conn.getInputStream();
    	  return parseJSON(instream);
    	 }
    	 return null;
     }
/*
 * 解析JSON数据
 * */
private static List<News> parseJSON(InputStream instream) throws Exception{
List<News> newses=new ArrayList<News>();
byte [] data=streamTool.read(instream);
String json=new String(data);
//将String格式的json文本转换为数组格式
JSONArray array=new JSONArray(json);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject=array.getJSONObject(i);
News news=new News(jsonObject.getInt("id"),jsonObject.getString("title"),jsonObject.getInt("timelength"));
newses.add(news);
}
return newses;
}


运行之后,安卓客户端以json形式接受数据,运行效果:


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
0 0
学习Python操作JSON,网络数据交换不用愁
本文,你可以学到如下内容: 1、JSON是什么? 2、JSON与XML的优劣差异? 3、将Python对象编码成JSON字符串 4、将JSON字符串解码为Python对象 5、解决JSON中文乱码问题
0 0
Nginx网络压缩 CSS压缩 图片压缩 JSON压缩
使用Nginx作为web应用服务时,会代理如下常见文件:`js`、`css`、`JSON`、`图片`等,本文提供基于Nginx内置的压缩技术,提供网络请求响应速度的解决方案。 网络压缩的原理是消耗CPU资源,减少文件在公网传输的大小,提高响应速度。相比于CPU的计算资源,网络带宽通常较为昂贵,因此通过CPU资源置换网络带宽资源在实际生产中是可行的操作方案。
0 0
Swift学习笔记(2)网络数据交换格式(XML,JSON)解析 [iOS实战 入门与提高卷]
Swift学习笔记(2)网络数据交换格式(XML,JSON)解析 参考书籍及资源:iOS实战 入门与提高卷 关东升 参考书籍地址 用NSXML来解析XML文档 用TBXML来解析XML文档 用NSJSONSerialization来解析JSON文档 目录 Swift学习笔记2网络数据交换格式XMLJSON解析 目录 用NSXML来解析XML文档
1818 0
+关注
光仔december
目前致力于JavaEE(struts/hibernate/spring/MyBatis等框架)、数据库(Mysql/oracle)、静态页面(Html/Css)技术和脚本(JavaSript/JQuery/Ajax)等技术方面的研究
文章
问答
文章排行榜
最热
最新
相关电子书
更多
可预期数据中心网络
立即下载
可编程网络视角的网络创新研究
立即下载
思科软件定义访问:实现基于业务意图的园区网络
立即下载