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

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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

相关文章
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的魔法:如何用神经网络解锁数据的奥秘
在人工智能的璀璨星空中,深度学习犹如一颗最亮的星,它以其强大的数据处理能力,改变了我们对世界的认知方式。本文将深入浅出地介绍深度学习的核心概念、工作原理及其在不同领域的应用实例,让读者能够理解并欣赏到深度学习技术背后的奇妙和强大之处。
13 3
|
4天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据在云端
【9月更文挑战第4天】在数字化时代,云计算已成为企业和个人存储和处理数据的首选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算的基本原理,网络安全的重要性,以及如何在使用云服务时保护数据安全。我们将从云服务的基本概念出发,深入讨论网络安全的关键技术,最后提供一些实用的建议,帮助您在使用云服务时确保数据安全。
23 6
|
6天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护数据的关键策略
在数字化时代,网络安全和信息安全成为维护个人隐私和企业资产的前沿防线。本文深入探讨了网络安全漏洞的根源、加密技术的应用以及提升安全意识的重要性。通过分析最新的网络攻击案例和防御措施,我们旨在为读者提供一套实用的知识体系,以识别和防范潜在的网络威胁。
|
9天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据在云中
【8月更文挑战第31天】在这篇文章中,我们将深入探讨云计算和网络安全之间的关系。我们将讨论云服务的安全性,以及如何通过实施强大的网络安全策略来保护您的数据。我们还将提供一些代码示例,以帮助您更好地理解这些概念。无论您是企业还是个人用户,这篇文章都将为您提供有关如何在云计算环境中保护自己的信息的宝贵见解。
|
9天前
|
数据采集 存储 JavaScript
构建你的首个Python网络爬虫:抓取、解析与存储数据
【8月更文挑战第31天】在数字时代的浪潮中,数据成为了新的石油。了解如何从互联网的海洋中提取有价值的信息,是每个技术爱好者的必备技能。本文将引导你通过Python编程语言,利用其强大的库支持,一步步构建出你自己的网络爬虫。我们将探索网页请求、内容解析和数据存储等关键环节,并附上代码示例,让你轻松入门网络数据采集的世界。
|
9天前
|
存储 安全 网络安全
网络安全与信息安全:保护数据的关键策略
【8月更文挑战第31天】在数字时代,网络安全和信息安全成为维护个人隐私和企业资产的前线。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供实用的代码示例来加强理解。我们将从基础概念出发,逐步引导读者了解如何识别和防范网络威胁,同时强调培养良好的安全习惯的必要性。通过本文,你将获得保护数据不受威胁的实用知识和技能。
|
11天前
|
存储 SQL 安全
网络安全与信息安全:保护数据的关键策略
【8月更文挑战第29天】在数字时代,数据的安全性成为了一个日益严峻的问题。本文将深入探讨网络安全漏洞、加密技术和安全意识的重要性,并分享一些实用的知识。我们将了解如何识别和防范网络攻击,学习如何使用加密技术来保护数据,以及提高个人和组织的安全意识。无论你是IT专业人士还是普通用户,这篇文章都将为你提供有价值的见解和建议。
|
4月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
345 1
|
12天前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。
|
15天前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
下一篇
DDNS