Android数据转化为Json形式给客户端及客户端使用json数据
2015-03-30 15:52
302 查看
(1)首先创建生成原始数据的service,VideoNewsServiceBean,这是一个接口的实现类,接口的功能如下:
News类
接口的实现类:生成一些假数据
(2)通过servlet将数据返回给客户端:ListServlet.java
(3)当客户端通过servlet请求的时候就经过跳转可以返回jsp页面数据(使用的是el表达式,因为json数据为String类型所以 contentType=”text/plain; charset=UTF-8”)
(4)在客户端取出数据
同样的第一步仍是创建一个News的类,这里省略
创建一个获取Json的service,VideoNewsService.java
这里边使用了一个工具类StreamTool.java,将输入流转化为byte数据返回
然后皆可以在具体的界面中进行数据的使用:(这里为一个listview设置值)
MainActivity.java
到此json数据的生成客客户端使用json数据操作已经完成!
public interface VideoNewsService { /** * 获取最新的视频资讯 * @return */ public List<News> getLastNews(); }
News类
public class News { private Integer id; private String title; private Integer timelength; public News(Integer id, String title, Integer timelength) { this.id = id; this.title = title; this.timelength = timelength; } //get/set方法 }
接口的实现类:生成一些假数据
public class VideoNewsServiceBean implements VideoNewsService { public List<News> getLastNews(){ List<News> newes = new ArrayList<News>(); newes.add(new News(90, "喜羊羊与灰太狼全集", 78)); newes.add(new News(10, "实拍舰载直升东海救援演习", 28)); newes.add(new News(56, "喀麦隆VS荷兰", 70)); return newes; } }
(2)通过servlet将数据返回给客户端:ListServlet.java
public class ListServlet extends HttpServlet { private static final long serialVersionUID = 1L; private VideoNewsService service = new VideoNewsServiceBean(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<News> videos = service.getLastNews(); // [{id:56,title:"xxxxx",timelength:90},{id:16,title:"xbbx",timelength:20}] StringBuilder builder = new StringBuilder(); //对数据进行追加为json格式 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域中,进行跳转,当客户端请求该servlet的时候跳转到该jsp页面,实际请求的为jsp页面 request.setAttribute("json", builder.toString()); request.getRequestDispatcher("/WEB-INF/page/jsonvideonews.jsp") .forward(request, response); } }
(3)当客户端通过servlet请求的时候就经过跳转可以返回jsp页面数据(使用的是el表达式,因为json数据为String类型所以 contentType=”text/plain; charset=UTF-8”)
<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}
(4)在客户端取出数据
同样的第一步仍是创建一个News的类,这里省略
创建一个获取Json的service,VideoNewsService.java
public class VideoNewsService { /** * 获取最新的视频资讯 * @return * @throws Exception */ public static List<News> getJSONLastNews() throws Exception{ String path = "服务器请求servlet的地址"; 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数据 * @param inStream * @return */ 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); //因为数据是类似于数组的形式重复的使用JSONArray 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; } }
这里边使用了一个工具类StreamTool.java,将输入流转化为byte数据返回
public class StreamTool { /** * 读取输入流数据 */ public static byte[] read(InputStream inStream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } inStream.close(); return outStream.toByteArray(); }
然后皆可以在具体的界面中进行数据的使用:(这里为一个listview设置值)
MainActivity.java
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView listView = (ListView) this.findViewById(R.id.listView); try { List<News> videos = VideoNewsService.getJSONLastNews();//需修改成你本机的Http请求路径 //这里使用的List<HashMap<String, Object>>可以将数据放入hashmap之后再放入list集合中 List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>(); for(News news : videos){ HashMap<String, Object> item = new HashMap<String, Object>(); item.put("id", news.getId()); item.put("title", news.getTitle()); item.put("timelength", getResources().getString(R.string.timelength) + news.getTimelength()+ getResources().getString(R.string.min)); data.add(item); } //为listview设置适配器 SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength}); listView.setAdapter(adapter); } catch (Exception e) { e.printStackTrace(); } } }
到此json数据的生成客客户端使用json数据操作已经完成!
相关文章推荐
- Android数据转化为Xml形式给客户端及客户端使用xml数据
- JST+JSON+AJAX——使用客户端js模版代替服务端数据绑定
- [开发知识点] 使用JQuery 将DataTable 转化成JSON数据,前端无法处理JSON数据的注意事项
- 使用json实现android服务器向客户端传数据
- 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service
- 使用JQuery 将DataTable 转化成JSON数据,前端无法处理JSON数据的注意事项
- JST+JSON+AJAX——使用客户端js模版代替服务端数据绑定
- 使用Struts 2将客户端JSON数据映射为服务器端Java对象
- 【Android 开发】: Android客户端与服务端之间使用JSON交互数据。
- 关于客户端与服务器ajax使用json数据交互,出现中文乱码或因包含html标答而报错的问题(base64加密)
- MVC客户端使用 Mustache.js把json数据填充到模版中
- 客户端 使用XML DOM加载json数据的方法
- MVC中ViewData中数据转化成json形式的变量的方法
- Unity客户端连接java服务端并通过json的形式接收数据-客户端
- JST+JSON+AJAX——使用客户端js模版代替服务端数据绑定
- 在线客户端:使用AJAX发送JSON数据
- 【COCOS2DX-LUA 脚本开发之十】使用Lua CJSON库进行encode与decode操作完成对Json数据转化
- SilverLight企业应用框架设计【五】客户端调用服务端(使用JSON传递数据,自己实现RESTful Web服务)
- Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回
- Android客户端与服务器端通过SOCKET连接进行读写(将JSON数据转化为字符串后传输)