豆瓣图书查询升级版“扫扫图书”
来源:互联网 发布:巨杉数据库笔试 编辑:程序博客网 时间:2024/04/27 22:23
原文出自:方杰|http://fangjie.sinaapp.com/?p=88 转载请注明出处
github:https://github.com/JayFang1993/BookScaning
首先可以看看效果展示:http://fangjie.sinaapp.com/?page_id=54
MainActivity.java是主界面的Activity ;BookView.java是显示图书基本信息的界面;CaptureActivity.java是扫描镜头界面;ReviewActivity是笔记的列表界面;ReviewContent.java是笔记的详细界面;BookInfo是book的实体类(在原来的基础上增加很多信息);Review是笔记的实体类。
主要的技术就是Zxing开源库的使用,简单的网络通信,数据解析及UI更新的要点。原来的Demo是直接调用Zxing的apk来使用的,这样就必须要求用户必须安装Zxing的apk,这样的应用肯定不行,所以我就把Zxing的一些包整到自己的项目中。
一.Zxing的使用:
首先将Zxing的核心包倒到自己的程序中, 在把Zxing官方的android demo包中去掉不用的,精简之后如我上面的工程文件一样。这几个包大致做的是有关Camera和解析的工作,我们只需稍微改动CaptureActivity.java和CaptureActivityHandler.java文件。CaptureActivity.java是一个Activity的子类,就是扫描开启摄像头的界面。其实真正对扫描界面处理的程序在CaptureActivityHandler.java中。我们需要的是在扫描得到ISBN值之后将其返回到MainActivity中。
MainActivity.java
//开启扫描按钮btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(MainActivity.this,CaptureActivity.class);startActivityForResult(intent,100);}});
CaptureActivityHandler.java
public void handleMessage(Message message) {switch (message.what) {case R.id.auto_focus:if (state == State.PREVIEW) {CameraManager.get().requestAutoFocus(this, R.id.auto_focus);}break;case R.id.restart_preview:Log.i("OUTPUT", "Got restart preview message");restartPreviewAndDecode();break;case R.id.decode_succeeded://扫描成功Log.i("OUTPUT", "Got decode succeeded message");state = State.SUCCESS;Bundle bundle = message.getData();Bitmap barcode = bundle == null ? null :(Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP);String str_result=((Result) message.obj).getText();activity.handleDecode((Result) message.obj, barcode);Intent intent=new Intent(activity,MainActivity.class);intent.putExtra("result", str_result);activity.setResult(100,intent);activity.finish();break;case R.id.decode_failed://扫描失败Log.i("OUTPUT", "Got return scan result message");state = State.PREVIEW;CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode);break;case R.id.return_scan_result://退出扫描Log.i("OUTPUT", "Got return scan result message");Intent intent2=new Intent(activity,MainActivity.class);activity.startActivity(intent2);break;}}
MainActivity.java
//获取扫描之后的ISBN码,并在豆瓣上搜索图书信息protected void onActivityResult(int requestCode,int resultCode,Intent data){super.onActivityResult(requestCode, resultCode, data);if(((requestCode==100)||(resultCode==Activity.RESULT_OK))&&data!=null){Log.i("OUTPUT","NGYUFU");progressDialog=new ProgressDialog(this);progressDialog.setMessage("请稍候,正在读取信息...");progressDialog.show();String urlstr="https://api.douban.com/v2/book/isbn/"+data.getExtras().getString("result");//扫到ISBN后,启动下载线程下载图书信息new DownloadThread(urlstr).start();}}
返回ISBN值之后,剩下的就是去豆瓣API上获取数据,然后解析,更新到UI上了。这些东西在之间的那篇博客已经讲过了,不一样的就是增加了Book的属性,增加了一个笔记显示列表和笔记具体内容的界面,这些东西会了网络通信和数据解析就很简单了,不多讲了。
二:豆瓣图书API:http://developers.douban.com/wiki/?title=book_v2
我用的是下面的两个,具体的数据属性自己去看API文档。这里因为豆瓣书评的数据必须要授权之后才能获取完整数据,没有授权的用户只能获取概要信息,为了简单,我就没有做OAuth认证部分,直接选择了笔记信息,这个数据不需要授权。
根据isbn获取图书信息 GET /v2/book/isbn/:name
获取某本图书的所有笔记 GET /v2/book/:id/annotations
欢迎各位关注我的个人站点:http://fangjie.sinaapp.com/
- 豆瓣图书查询升级版“扫扫图书”
- Android豆瓣图书查询Demo
- Android豆瓣图书查询Demo
- C#基于豆瓣API查询图书信息
- 豆瓣图书 数据分析
- 图书查询
- 根据isbn查询图书信利用豆瓣的API
- 豆瓣API查询和显示图书的信息
- 图书api 查询图书内容
- 豆瓣API用户图书收藏
- PHP 抓取豆瓣图书信息
- 豆瓣图书搜索系统实验
- 仿豆瓣图书商城Jsonp
- python爬取豆瓣图书
- vue的简易豆瓣图书
- 图书
- 图书
- 图书
- 黑马程序员--集合
- C语言学习笔记9--结构体
- 寻找大学目标及行动步骤——记ITAEM团队第二期宣讲会(2014.05.14)
- js的编码成gb2312的编码函数(URLEncode)
- vfnjh
- 豆瓣图书查询升级版“扫扫图书”
- cdvgfx
- 掌握11项技能,你就是优秀的前端开发工程师
- Linux下Watchdog
- java(或C++)继承、重载、覆盖、多态
- 数据结构--线索二叉树
- [转] error C2471: 无法更新程序数据库 vc90.pdb
- UML建模之时序图(Sequence Diagram)
- 读取XML ,IOS、Android、PC