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

系统 1715 0

原文出自:方杰| 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/  

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论