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

来源:互联网 发布:win32系统编程 pdf 编辑:程序博客网 时间:2024/06/06 03:56

根据上一个案例: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形式接受数据,运行效果:


0 0
原创粉丝点击