Android开发18——获取网络资源之json数据

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介:
+关注继续查看

一、项目背景
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。
本文获取web项目返回的JSON数据。Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML。

 

二、实例代码

Web项目


  1. /**  
  2.  * 新闻业务类  
  3.  *   
  4.  * @author 徐越  
  5.  *   
  6.  */ 
  7. public class VideoNewsServiceImpl implements VideoNewsService  
  8. {  
  9.     public List<VideoNews> readNews()  
  10.     {  
  11.         List<VideoNews> lst = new ArrayList<VideoNews>();  
  12.         lst.add(new VideoNews(1"喜洋洋"20));  
  13.         lst.add(new VideoNews(2"变形金刚"10));  
  14.         lst.add(new VideoNews(3"功夫熊猫"20));  
  15.         return lst;  
  16.     }  
  17. }  
  18.  
  19. /**  
  20.  * 新闻Servlet  
  21.  *   
  22.  * @author 徐越  
  23.  *   
  24.  */ 
  25. public class ListServlet extends HttpServlet  
  26. {  
  27.     private static final long serialVersionUID = 1L;  
  28.     private VideoNewsService vs = new VideoNewsServiceImpl();  
  29.  
  30.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  31.     {  
  32.         doPost(request, response);  
  33.     }  
  34.  
  35.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         List<VideoNews> news = vs.readNews();  
  38.         JSONArray jsonarr = JSONArray.fromObject(news);  
  39.         response.setCharacterEncoding("UTF-8");  
  40.         response.setContentType("text/plain;charset=UTF-8");  
  41.         response.setHeader("Pragma""No-cache");  
  42.         response.setHeader("Cache-Control""no-cache");  
  43.         response.setDateHeader("Expires"0);  
  44.         response.getWriter().print(jsonarr);  
  45.     }  

Android项目


  1. public class VideoNewsServiceImpl implements VideoNewsService  
  2. {  
  3.  
  4.     /**  
  5.      * 获取最新视频资讯,从JSON文件中,解析效率高  
  6.      *   
  7.      * @return  
  8.      * @throws Exception  
  9.      */ 
  10.     public List<VideoNews> getNewsFromJson() throws Exception  
  11.     {  
  12.         List<VideoNews> lst = new ArrayList<VideoNews>();  
  13.         String path = "http://xxx.xxx.xxx.xxx:8080/web/ListServlet";  
  14.         URL url = new URL(path);  
  15.         HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  16.         conn.setReadTimeout(5000);  
  17.         conn.setRequestMethod("GET");  
  18.         if (200 == conn.getResponseCode())  
  19.         {  
  20.             InputStream instream = conn.getInputStream();  
  21.             lst = parseJSON(instream);  
  22.         }  
  23.         return lst;  
  24.     }  
  25.  
  26.     /**  
  27.      * 解析JSON  
  28.      */ 
  29.     private List<VideoNews> parseJSON(InputStream instream) throws Exception  
  30.     {  
  31.         List<VideoNews> lst = new ArrayList<VideoNews>();  
  32.         byte[] data = IOUtils.read(instream);  
  33.         String jsonStr = new String(data);  
  34.         JSONArray array = new JSONArray(jsonStr);  
  35.         for (int i = 0; i < array.length(); i++)  
  36.         {  
  37.             JSONObject jsonObj = (JSONObject) array.getJSONObject(i);  
  38.             VideoNews v = new VideoNews(jsonObj.getInt("id"),   
  39.                     jsonObj.getString("title"), jsonObj.getInt("timeLength"));  
  40.             lst.add(v);  
  41.         }  
  42.         return lst;  
  43.     }  
  44. }  
  45.  
  46. /**  
  47.  * IO操作工具类  
  48.  *   
  49.  * @author 徐越  
  50.  *   
  51.  */ 
  52. public class IOUtils  
  53. {  
  54.     /**  
  55.      * 读取输入流为byte[]数组  
  56.      */ 
  57.     public static byte[] read(InputStream instream) throws IOException  
  58.     {  
  59.         ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  60.         byte[] buffer = new byte[1024];  
  61.         int len = 0;  
  62.         while ((len = instream.read(buffer)) != -1)  
  63.         {  
  64.             bos.write(buffer, 0, len);  
  65.         }  
  66.         return bos.toByteArray();  
  67.     }  

需要指出的是
在web项目中我采用的是net.sf.json下的类对JSON进行解析,而Android项目中默认自带的JSON包是org.json。API有所不同,只要熟悉一下即可。

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1088074如需转载请自行联系原作者


woshixuye111

相关文章
|
6月前
|
存储 XML JSON
Android操作配置文件封装类,使用json序列化的方式实现
Android操作配置文件封装类,使用json序列化的方式实现
|
7月前
|
JSON Android开发 数据格式
Android:解析Json异常 Expected a string but was BEGIN_OBJECT at
今天解析后端数据时,发现了这个报错:Expected BEGIN_OBJECT but was STRING at 看来是自己哪儿解析错误了。 因为数据的特殊性,后端返回的Json串里面可能还会有Json数据,可能嵌套了三次层,
|
12月前
|
XML 存储 JSON
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
192 0
|
12月前
|
XML JSON 前端开发
Android网络请求,获取数据demo,几种网络请求的区别,JSON 与 XML 的区别、优劣势
Android网络请求,获取数据demo,几种网络请求的区别,JSON 与 XML 的区别、优劣势
186 0
|
12月前
|
JSON Android开发 数据格式
android中Json数据保存方式
android中Json数据保存方式
137 0
|
XML 存储 JSON
第十一讲:Android中的xml和Json文件的解析
第十一讲:Android中的xml和Json文件的解析
43021 2
第十一讲:Android中的xml和Json文件的解析
|
XML JSON JavaScript
Android之JSON解析
Android之JSON解析
Android之JSON解析
|
JSON Android开发 数据格式
Android的JSON解析(上)
Android的JSON解析(上)
143 0
Android的JSON解析(上)
|
XML JSON JavaScript
Android | 网络技术基础梳理——WebView以及HTTP运用(HttpURLConnection及OkHttp)、XML以及JSON解析(demo+bug)
Android | 网络技术基础梳理——WebView以及HTTP运用(HttpURLConnection及OkHttp)、XML以及JSON解析(demo+bug)
|
存储 JSON 缓存
【Android】8.0网络请求数据与JSON解析
既然需要访问网络自然需要网络请求权限 <uses-permission android:name="android.permission.INTERNET"/> 除此之外还需要加上这一行,否则http的网页请求不成功 android:usesCleartextTraffic="true"
146 0
相关产品
云迁移中心
推荐文章
更多