【Android开发】JSON格式传送网络信息

简介:

根据上一个案例:http://blog.csdn.net/acmman/article/details/38755237

下午又写了关于安卓网络传输的另外一种方法,采用JSON格式进行网络信息传递并解析。

 

用的WEB应用与Android客户端都是在上一个样例的基础上改写的。

 

WEB应用端

Servlet有所变化

package deu.hpu.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import deu.hpu.servise.dima.News;
import deu.hpu.servise.impl.VideoNewsService;
import deu.hpu.servise.impl.VideoNewsServiceImpl;
 
public class ListServlet extends HttpServlet {
    private VideoNewsService service=new VideoNewsServiceImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        doPost(request,response);
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
           List<News> videos=service.getLastNews();
           //得到请求参数
           String format=request.getParameter("format");
           //如果是以json的请求参数,就以就向客户端返回json格式的数据,否则就返回XML格式的数据
           if("json".equals(format)){
        	   StringBuilder builder=new StringBuilder();
        	   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.setAttribute("json", builder.toString());
        	   request.getRequestDispatcher("/WEB-INF/Page/jsonvideonews.jsp").forward(request, response);
           }
           else{
        	   request.setAttribute("videos", videos);
               request.getRequestDispatcher("/WEB-INF/Page/videonews.jsp").forward(request, response);  
           } 
}
 
}


相应的,在WEB-INF/Page下创建了新的JSP文件,用来接受request带过来的json数据,并描述成json数据的格式

相比XML格式的,json属于普通文本格式。代码很简单:

<%@ page language="java" import="java.util.*" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}

完成,之后在地址栏输入

http://10.20.124.72:8080/videonews/ListServlet?format=json

注意:后面必须加?format=json,不然无法以json格式输出数据!!

 

效果:


Android客户端:

 

我们在VedioService业务类中新增getJSONLastNews() 与parseJSON()两个方法,用来得到json数据和解析json数据以 List形式返回

/*
 * 获取最新的视频资讯
 * */
     public static List<News> getJSONLastNews() throws Exception{
    	 String path="http://10.20.124.72:8080/videonews/ListServlet?format=json";
    	 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数据
 * */
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);
//将String格式的json文本转换为数组格式
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;
}


运行之后,安卓客户端以json形式接受数据,运行效果:


相关文章
|
21天前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的海洋中,自定义控件是那片璀璨的星辰。它不仅让应用界面设计变得丰富多彩,还提升了用户体验。本文将带你探索自定义控件的核心概念、实现过程以及优化技巧,让你的应用在众多竞争者中脱颖而出。
|
21天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
82 1
|
24天前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
51 4
Android开发表情emoji功能开发
|
22天前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
51 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
5天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
21 5
|
3天前
|
设计模式 IDE Java
探索安卓开发:从新手到专家的旅程
【10月更文挑战第22天】 在数字时代的浪潮中,移动应用开发如同一座金矿,吸引着无数探险者。本文将作为你的指南针,指引你进入安卓开发的广阔天地。我们将一起揭开安卓平台的神秘面纱,从搭建开发环境到掌握核心概念,再到深入理解安卓架构。无论你是初涉编程的新手,还是渴望进阶的开发者,这段旅程都将为你带来宝贵的知识和经验的财富。让我们开始吧!
|
20天前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件基础与进阶
【10月更文挑战第5天】在Android应用开发中,自定义控件是提升用户体验和界面个性化的重要手段。本文将通过浅显易懂的语言和实例,引导你了解自定义控件的基本概念、创建流程以及高级应用技巧,帮助你在开发过程中更好地掌握自定义控件的使用和优化。
27 10
|
12天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
49 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
24天前
|
JSON API Android开发
探索安卓开发之旅:打造你的第一个天气应用
在这篇文章中,我们将一起踏上一段激动人心的旅程,学习如何在安卓平台上开发一个简单的天气应用。通过实际操作和代码示例,我们将逐步构建一个能够显示当前位置天气情况的应用。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供清晰的指导和启发性的见解,帮助你理解和掌握安卓开发的基础知识。让我们一起探索代码的世界,解锁新技能,实现你的创意和梦想。
|
20天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。