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

简介:

一、项目背景
在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

相关文章
|
2天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
22 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
7天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
9 0
|
7天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
8 0
|
11天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
28 0
|
15天前
|
存储 JSON 数据挖掘
python逐行读取txt文本中的json数据,并进行处理
Python代码示例演示了如何读取txt文件中的JSON数据并处理。首先,逐行打开文件,然后使用`json.loads()`解析每一行。接着,处理JSON数据,如打印特定字段`name`。异常处理包括捕获`JSONDecodeError`和`KeyError`,确保数据有效性和字段完整性。将`data.txt`替换为实际文件路径运行示例。
12 2
|
16天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
18天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
40 0
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
|
1月前
|
机器学习/深度学习 算法 计算机视觉
m基于深度学习网络的性别识别系统matlab仿真,带GUI界面
m基于深度学习网络的性别识别系统matlab仿真,带GUI界面
29 2