豆瓣图书查询升级版“扫扫图书”

原文出自:方杰|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包中去掉不用的,精简之后如我上面的project文件一样。这几个包大致做的是有关Camera和解析的工作,我们仅仅需略微修改CaptureActivity.java和CaptureActivityHandler.java文件。CaptureActivity.java是一个Activity的子类,就是扫描开启摄像头的界面。事实上真正对扫描界面处理的程序在CaptureActivityHandler.java中。我们须要的是在扫描得到ISBN值之后将其返回到MainActivity中。

MainActivity.java

//开启扫描button
btn.setOnClickListener(new View.OnClickListener() {
	@Override
	public 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的属性,添加了一个笔记显示列表和笔记详细内容的界面,这些东西会了网络通信和数据解析就非常easy了,不多讲了。

二:豆瓣图书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/

时间: 2024-12-25 14:14:28

豆瓣图书查询升级版“扫扫图书”的相关文章

Node.js 切近实战(二) 之图书管理系统(图书查询)

最近又当上了Master,负责带项目,有时候,遇到的问题我很郁闷.比如一个Story,需求中说的是将单个修改改为批量修改,举个例子,商品信息修改,之前是用一个商品id修改,但是现在改成多个商品id修改.我的意思是直接将文本框宽度高度加大,支持回车换行就行了,然后再将API修改为支持批量查询.这个界面上上面是一个Grid,下面是一个表单,选择Grid的数据后,会加载到下面表单.只能加载一条下去,就因为这个,有人提出如果加载一个下去,那么大个文本框只显示一个选中的商品id,视觉上无法接受.说是要将选

SQL查询升级版

根据现有的学生表,课程表,选课关系表,查询一.没有修过李明老师的课的学生,查询 二,既学过a课程,又学过b课程的学生姓名Sql代码 S表 [SNO,SNAME]--学生表 C表 [CNO,CNAME,CTEATHER] --课程表 SC表 [SNO,CNO,SCGRADE] --选课关系表 查询一:没有修过李明老师的课的学生的姓名 select sname from s where not exists (select*from sc,c where sc.cno=c.cno and c.cte

图书盘点机,图书条码数据采集器,高效的仓库管理书籍条码解决方案

图书库存扮演书中仓库管理运营的一个重要的关键业务数据.发展在任何年龄,现在现在促进血液循环的书籍,图书类型和更新速度是一样的迅速崛起. 为了确保立足于图书业,要保证正确的进货和库存控制以及发货.从而避免货物积压.管理费用的添加.然而.传统简单.静态的仓库管理已无法保证企业资源的高效利用.现在的图书行业对数据信息的准确性.实时性要求越来越高.仅靠人工记忆和手工录入.不但费时费力,并且easy出错,给企业带来巨大损失. 图书行业仓储管理中运用汉码盘点机进行仓储管理,扫描条码.录入数量即完毕各种单据的

图书盘点机,图书条码数据采集器,高效图书仓储管理条码解决方案

图书的盘点在图书企业的仓储管理运作中起着至关重要的作用.随时时代的发展,现如今图书的发行量越来越大,图书的种类以及更新速度也同样的飞速上涨.要保证在图书业立足,首先要保证正确的进货和库存控制以及发货,从而避免货物积压.管理费用的增加.然而,传统简单.静态的仓库管理已无法保证企业资源的高效利用.如今的图书行业对数据信息的准确性.实时性要求越来越高,仅靠人工记忆和手工录入,不但费时费力,而且容易出错,给企业带来巨大损失. 图书行业仓储管理中运用汉码盘点机进行仓储管理,扫描条码,录入数量即完成各种单据

Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量

今天,花了一个晚上的时间边学边做,搞出了我的第一个爬虫.学习Python有两个月了,期间断断续续,但是始终放弃,今天搞了一个小项目,有种丰收的喜悦.废话不说了,直接附上我的全部代码. 1 # -*- coding:utf-8 -*- 2 __author__ = 'Young' 3 4 import re,urllib #urllib : 网页访问,返回网页的数据.内容 5 def my_get(ID):# 封装成函数方便调用 6 html = urllib.urlopen("https://r

用python+selenium抓取豆瓣读书中最受关注图书,按照评分排序

抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评论 #coding=utf-8 from selenium import webdriver from time import sleep class DoubanPopularBook:     def __init__(self):         self.dr = webdriver.Chrome()         self.

平院微信图书馆——中转图书查询

2014年做一个微信公众平台--平院小助手(pdsuhelp),想做一款产品,推广平台,于是便做了这个平院微信图书馆,托管于BAE(项目地址:pdsuhelp.duapp.com/lt),目前只能提供查询功能,至于续借等功能,以后看情况添加! 项目工作流程: 1.获取图书馆查询图书地址,通过get传参,替换word的参数 2.抓取图书列表页内容,并显示,抓取每本图书详情页面超链接,并加上a 标签 ,目前只能抓取第一页 3:点击进入图书详情页面,抓取主要信息,书名,书放的位置. 主要技术: 1:;

Java图书查询系统实例(简化精炼版及部分更正)

1.创建书大类 public class Book { private String name; private int num; public Book(String name,int num){ this.name=name; this.num=num; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public int getNum(){ retur

使用scrapy简易爬取豆瓣9分榜单图书

注:部分内容参考http://www.cnblogs.com/voidsky/p/5490798.html 首先创建一个项目douban9fen [email protected]:~/pachong$ scrapy startproject douban9fen New Scrapy project 'douban9fen', using template directory '/usr/local/lib/python2.7/dist-packages/scrapy/templates/pr