在安卓中解析JSON串可以使用的方法有很多,比如说用官方提供的JSONObject或者谷歌提供的开源库GSON,以及一些第三方开源库。

这里用的是GSON,为了测试方便,借助了一个百度的api,一个图片识别的api,向服务器请求之后,服务器会返回一个JSON串来描述图片识别的结果,我们要做的是解析这个JSON获得里面的数据,并且书出来。

这里是图片

接下来是使用api,这里不解释,因为也不是重点,贴一下代码

 String httpUrl = "http://apis.baidu.com/idl_baidu/baiduocrpay/idlocrpaid";
Base64 base64 = new Base64();
String httpArg = URLEncoder.encode(base64
.encode(getBytes("c://IMG_20151230_205532.jpg")));
5 httpArg = "fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image="
+ httpArg;
String jsonResult = request(httpUrl, httpArg);
System.out.println(jsonResult);

返回的JSON串为

{"errNum":"0","errMsg":"success","querySign":"4053545886,2545695729","retData":[{"rect":{"left":"35","top":"18","width":"432","height":"114"},"word":" Android"},{"rect":{"left":"31","top":"174","width":"373","height":"108"},"word":"0626"}]}

然后这里要用到GSON来解析它,使用到GSON的包为

接下来,分析我们获取回来的,在这里可以看到,这个串返回是一个单独的串,而不是一个数组,因此我们就要建立一个类,用来映射这个串的内容,因为这个串里面的retData是一个数组,所以在对应的类里面应该有一个List来放这个数组的数据,然后在ratDate中有一个rect里面有4个定位和大小的对应值,所以,这里要构造三个类,用于映射,如下:

 public class Response {
private String errNum;
private String errMsg;
private String querySign;
private List<RetData> retData; public String getErrNum() {
return errNum;
} public void setErrNum(String errNum) {
this.errNum = errNum;
} public String getErrMsg() {
return errMsg;
} public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
} public String getQuerySign() {
return querySign;
} public void setQuerySign(String querySign) {
this.querySign = querySign;
} public List<RetData> getRetData() {
return retData;
} public void setRetData(List<RetData> retData) {
this.retData = retData;
} }
 public class RetData {
private Rect rect;
private String word; public Rect getRect() {
return rect;
} public void setRect(Rect rect) {
this.rect = rect;
} public String getWord() {
return word;
} public void setWord(String word) {
this.word = word;
} }
 public class Rect {
private String left;
private String top;
private String width;
private String height; public String getLeft() {
return left;
} public void setLeft(String left) {
this.left = left;
} public String getTop() {
return top;
} public void setTop(String top) {
this.top = top;
} public String getWidth() {
return width;
} public void setWidth(String width) {
this.width = width;
} public String getHeight() {
return height;
} public void setHeight(String height) {
this.height = height;
} }

接收类定义好了以后,可以开始用GSON来映射,方法非常简单,新建一个Gson的对象,然后调用fromJson方法让Gson完成映射

 Gson gson = new Gson();
Response response = gson.fromJson(jsonResult, Response.class);
for (int i = 0; i < response.getRetData().size(); i++) {
Rect rect = response.getRetData().get(i).getRect();
System.out.println("识别出字符的位置为:left=" + rect.getLeft() + " top="
+ rect.getTop() + " height=" + rect.getHeight() + " width="
+ rect.getWidth());
System.out.println("识别出的字符为:"
+ response.getRetData().get(i).getWord());
}

结果显示:

识别出字符的位置为:left=35 top=18 height=114 width=432
识别出的字符为: Android
识别出字符的位置为:left=31 top=174 height=108 width=373
识别出的字符为:0626

Android开发学习之路-GSON使用心得(OCR图片识别)的更多相关文章

  1. Android开发学习之路-SnackBar使用心得

    SnackBar是DesignSupportLibrary中的一个重要的控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackB ...

  2. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  3. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  4. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  5. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  6. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

  7. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

  8. Android开发学习之路--MAC下Android Studio开发环境搭建

    自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...

  9. Android开发学习之路-记一次CSDN公开课

    今天的CSDN公开课Android事件处理重难点快速掌握中老师讲到一个概念我觉得不正确. 原话是这样的:点击事件可以通过事件监听和回调两种方法实现. 我一听到之后我的表情是这样的: 这跟我学的看的都不 ...

随机推荐

  1. C#实现按键精灵的'找图' '找色' '找字'的功能

    背景:游戏辅助功能通常使用按键精灵编写脚本,按键精灵的最大卖点就是能够找到画面中字,图,色,这对于模拟用户鼠标操作至关重要,这能找到道具,找到血量,实现自动打怪,自动补血,自动买卖道具,博主闲来无聊, ...

  2. GDB常用命令

    一. gdb使用流程 1.编译生成可执行文件 gcc -g hello.c -o hello 2.启动gdb gdb hello 3. 在main处设置断点 break main 4.运行程序 run ...

  3. JavaScript-永远点不到的小窗口

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. WINCE 获取智能设备唯一编号

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Cobbler学习之二--Cobbler的Web管理和维护

    Cobbler的Web管理模块和命令行模块是可以分开工作的,没有依赖关系. 1 WebUI的功能 查看所有的对象和配置文件 添加或者删除system,distro, profile 执行“cobble ...

  6. 一款免费支持PDF、word、excel、PPT、jpeg之间互转线上软件

    偶然发现的一款免费支持PDF.word.excel.PPT.jpeg之间互转,支持合并pdf.加密解密PDF的线上软件,首先声明,不是广告党,我自己试用过,确实是目前我用过最好用的,如果有朋友有更好的 ...

  7. js获取select标签选中的值

    <p>        城市:         <select id="Select1" name="D1">            &l ...

  8. c#读取webconfig

    string Conn_str = ConfigurationManager.AppSettings["connectionString"].ToString();

  9. SIP vs XMPP

    sip和xmpp都是应用层的协议,主要用来在互联网上发送语音和即时通讯IM,rfc3521定义了sip,rfc3920定义了xmpp.xmpp来自即时通讯系统,sip类似语音和视频通信. xmpp协议 ...

  10. tomcat启动指定项目

    看一下server.xml,conf/localhost/,web.xml是否配置了其他的WEBAPP应用,但实际地址已经被移除,清空WORK目录试试 http://blog.163.com/mous ...