Android数据转化为Json形式给客户端及客户端使用json数据

(1)首先创建生成原始数据的service,VideoNewsServiceBean,这是一个接口的实现类,接口的功能如下:

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数据操作已经完成!

时间: 2024-08-03 22:51:44

Android数据转化为Json形式给客户端及客户端使用json数据的相关文章

python json形式的字符串 解码还原为json

1 #coding:utf8 2 import demjson 3 '''这个方法可以很方便的把dict,list等json格式的数据 4 编码成字符串 5 和把字符串解码还原为json 6 7 注意点:就是字符串是json形式的,但是类型是字符串 8 ''' 9 data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] 10 json = demjson.encode(data) 11 data2 = demjson.decode(j

Android数据转化为Xml形式给客户端及客户端使用xml数据

(1)创建实体类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方法 } (2)面向接口

(The application/json Media Type for JavaScript Object Notation (JSON))RFC4627-JSON格式定义

原文  http://laichendong.com/rfc4627-zh_cn/ 摘要 JavaScript Object Notation (JSON)是一个轻量级的,基于文本的,跨语言的数据交换格式.它从ECMAScript编程语言标准(ECMAScript Programming Language Standard)衍生而来.JSON定义了一组用于表示结构化数据的可移植的格式化规则. 1. 简介 JavaScript Object Notation (JSON)是用于结构化数据序列化的一

Ace教你一步一步做Android新闻客户端(三) JSON数据解析

对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式,现在给大家讲解一下json这个知识点, 1 如何通过json-lib和gson这两个json解析库来对解析我们的json数据, 2 以及如何在我们的Android客户端解析来自服务器端的json数据,并更新到UI当中.(下篇来讲) 一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编

Android中解析JSON形式的数据

1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. 2.JSON的结构: (1) Name/Value Pairs(无序的):类似所熟知的Keyed list. Hash table.Disctionary和Assoc

Android:解决客户端从服务器上获取数据乱码的方法

向服务器发送HTTP请求,接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了 String name = new String(response.getBytes("iso-8859-1"), "UTF-8"); 也无济于事.想到服务器好像是用URLENCODER编了码的,怀着试一试的态度

java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中

1.项目介绍: 由于大数据部门涉及到其他部门将数据传到数据中心,大部分公司采用的方式是用json文件的方式传输,因此就需要编写服务端和客户端的小程序了.而我主要实现服务端的代码,也有相应的客户端的测试代码.这里须有一个需要提到的是,我在实现接收json文件的同时,而且还需将数据写到hbase中.写入到hbase当中采用的是批量插入的方式,即一次插入多条记录. 好了,有了前面的说明,下面来简单的说一下我实现的服务端的小程序把. 2.为了实现服务端能够监听客户端的行为,因此我在服务端采用多线程的技术

在java中将各种类型数据转化为json和从json中取数据

首先,导入以下jar包 下面是各种类型转化为json和从json中取出数据的程序 package jsontest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonMain { public

C# Json数据反序列化为Dictionary并根据关键字获取指定值1

Json数据: { "dataSet": { "header": { "returnCode": "0", "errorInfo": "HTTP请求错误", "version": "V1.0R010", "totalRows": "2000", "returnRows": "20