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

简介:

一、项目背景
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。

本文获取web项目返回的JSON数据。Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML。

 

 

二、实例代码

Web项目

/**
 * 新闻业务类
 * 
 * @author 徐越
 * 
 */
public class VideoNewsServiceImpl implements VideoNewsService
{
	public List<VideoNews> readNews()
	{
		List<VideoNews> lst = new ArrayList<VideoNews>();
		lst.add(new VideoNews(1, "喜洋洋", 20));
		lst.add(new VideoNews(2, "变形金刚", 10));
		lst.add(new VideoNews(3, "功夫熊猫", 20));
		return lst;
	}
}

/**
 * 新闻Servlet
 * 
 * @author 徐越
 * 
 */
public class ListServlet extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	private VideoNewsService vs = new VideoNewsServiceImpl();

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		List<VideoNews> news = vs.readNews();
		JSONArray jsonarr = JSONArray.fromObject(news);
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/plain;charset=UTF-8");
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		response.getWriter().print(jsonarr);
	}
}


Android项目

public class VideoNewsServiceImpl implements VideoNewsService
{

	/**
	 * 获取最新视频资讯,从JSON文件中,解析效率高
	 * 
	 * @return
	 * @throws Exception
	 */
	public List<VideoNews> getNewsFromJson() throws Exception
	{
		List<VideoNews> lst = new ArrayList<VideoNews>();
		String path = "http://xxx.xxx.xxx.xxx:8080/web/ListServlet";
		URL url = new URL(path);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setReadTimeout(5000);
		conn.setRequestMethod("GET");
		if (200 == conn.getResponseCode())
		{
			InputStream instream = conn.getInputStream();
			lst = parseJSON(instream);
		}
		return lst;
	}

	/**
	 * 解析JSON
	 */
	private List<VideoNews> parseJSON(InputStream instream) throws Exception
	{
		List<VideoNews> lst = new ArrayList<VideoNews>();
		byte[] data = IOUtils.read(instream);
		String jsonStr = new String(data);
		JSONArray array = new JSONArray(jsonStr);
		for (int i = 0; i < array.length(); i++)
		{
			JSONObject jsonObj = (JSONObject) array.getJSONObject(i);
			VideoNews v = new VideoNews(jsonObj.getInt("id"), 
					jsonObj.getString("title"), jsonObj.getInt("timeLength"));
			lst.add(v);
		}
		return lst;
	}
}

/**
 * IO操作工具类
 * 
 * @author 徐越
 * 
 */
public class IOUtils
{
	/**
	 * 读取输入流为byte[]数组
	 */
	public static byte[] read(InputStream instream) throws IOException
	{
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = instream.read(buffer)) != -1)
		{
			bos.write(buffer, 0, len);
		}
		return bos.toByteArray();
	}
}

需要指出的是

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

 

目录
相关文章
|
3月前
|
Python
LBA-ECO CD-32 通量塔网络数据汇编,巴西亚马逊:1999-2006,V2
该数据集汇集了1999年至2006年间巴西亚马逊地区九座观测塔的碳和能量通量、气象、辐射等多类数据,涵盖小时至月度时间步长。作为第二版汇编,数据经过协调与质量控制,扩展了第一版内容,并新增生态系统呼吸等相关计算数据,支持综合研究与模型合成。数据以36个制表符分隔文本文件形式提供,配套PDF说明文件,适用于生态与气候研究。引用来源为Restrepo-Coupe等人(2021)。
40 1
|
2月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
144 11
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
68 4
|
3月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
4月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
1061 2
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
217 17
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
170 10
|
9月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
175 10
|
9月前
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。

热门文章

最新文章