Android 开发中使用开源框架 DataDroid

DataDroid 框架简介

DataDroid是基于Android平台的一个开源的开发库,基于Android 的RESTful封装用来简化Android应用中的数据管理.该开源库的下载地址为 CSDN资源.

DataDriod 在Android项目中的使用

从github上clone下来的源代码中就有很多种类型的数据管理的demo,这里就简单得描述一下通过DataDroid的工作流程进行一个打开摄像头的过程.想看下面项目的源码的可以去我的github查看,地址:Github

1.以单例模式建立一个请求管理器,这里需要注意的是在构造父类的时候,需要将一个RequestService传递给请求管理器,在调用RequestManager的execute方法时,会启动这个service.

<span style="font-family:Microsoft YaHei;font-size:14px;">public class CameraRequestManager extends RequestManager {
    // Singleton management
    private static CameraRequestManager sInstance;

    public synchronized static CameraRequestManager from(Context context) {
        if (sInstance == null) {
            sInstance = new CameraRequestManager(context);
        }

        return sInstance;
    }
	private CameraRequestManager(Context context) {
		super(context,CameraRequestService.class);
	}

}</span>

2.创建一个请求工厂,来创建各种不同的请求,这里就提供了一个返回打开摄像头的请求.

<span style="font-family:Microsoft YaHei;font-size:14px;">public final class CameraRequestFactory {
	// Request types
	public static final int REQUEST_TYPE_OPEN_CAMERA = 0;

    // Response data
    public static final String BUNDLE_EXTRA_SWITCH =
    		"cn.jesse.camera.datadroid.data.switch";
    public static final String BUNDLE_EXTRA_OPEN_CAMERA =
    		"cn.jesse.camera.datadroid.data.opencamera";
    public static final String BUNDLE_EXTRA_RESULT =
            "com.foxykeep.datadroidpoc.extra.result";
    public static final String BUNDLE_EXTRA_ERROR_MESSAGE =
            "com.foxykeep.datadroidpoc.extra.errorMessage";

    public static Request getOpeningCameraOperation(int type){
    	Request request = new Request(REQUEST_TYPE_OPEN_CAMERA);
        request.setMemoryCacheEnabled(true);
        request.put(OpenCameraOperation.PARAM_METHOD, type);
        return request;
    }
}</span>

3.创建一个打开摄像头的operation,打开摄像头这个动作的所有操作都在这个operation中完成,并且完成之后可以通过bundle来将打开的结果回调给调用的activity.

<span style="font-family:Microsoft YaHei;font-size:14px;">public class OpenCameraOperation implements Operation {
	private final String TAG = OpenCameraOperation.class.getSimpleName();
	public static final String PARAM_METHOD = "cn.jesse.camera.extra.cameraType";
	@Override
	public Bundle execute(Context context, Request request)
			throws ConnectionException, DataException, CustomRequestException {
		Log.i(TAG, "execute");
		int cameraType = request.getInt(PARAM_METHOD);
		Log.i(TAG, "execute, camera type" + cameraType);
		Bundle bundle = new Bundle();
        bundle.putInt(CameraRequestFactory.BUNDLE_EXTRA_SWITCH, CameraRequestFactory.REQUEST_TYPE_OPEN_CAMERA);
        bundle.putBoolean(CameraRequestFactory.BUNDLE_EXTRA_OPEN_CAMERA,true);
        return bundle;
	}
}</span>

4.创建RequestService,根据不同的请求类型提供与之相对应的operation.

<span style="font-family:Microsoft YaHei;font-size:14px;">public class CameraRequestService extends RequestService {

	@Override
	public Operation getOperationForType(int requestType) {
		switch (requestType) {
		case CameraRequestFactory.REQUEST_TYPE_OPEN_CAMERA:
			return new OpenCameraOperation();
		}
		return null;
	}

    @Override
    protected Bundle onCustomRequestException(Request request, CustomRequestException exception) {
        if (exception instanceof MyCustomRequestException) {
            Bundle bundle = new Bundle();
            bundle.putString(CameraRequestFactory.BUNDLE_EXTRA_ERROR_MESSAGE,
                    "MyCustomRequestException thrown.");
            return bundle;
        }
        return super.onCustomRequestException(request, exception);
    }
}</span>

5.建立datadroid的activity,提供对datadroid 请求和请求队列的管理.

<span style="font-family:Microsoft YaHei;font-size:14px;">public abstract class DataDroidActivity extends FragmentActivity {

    private static final String SAVED_STATE_REQUEST_LIST = "savedStateRequestList";

    protected CameraRequestManager mRequestManager;
    protected ArrayList<Request> mRequestList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRequestManager = CameraRequestManager.from(this);

        if (savedInstanceState != null) {
            mRequestList = savedInstanceState.getParcelableArrayList(SAVED_STATE_REQUEST_LIST);
        } else {
            mRequestList = new ArrayList<Request>();
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putParcelableArrayList(SAVED_STATE_REQUEST_LIST, mRequestList);
    }

    protected void showBadDataErrorDialog() {
        new ErrorDialogFragmentBuilder(this).setTitle(R.string.dialog_error_data_error_title)
                .setMessage(R.string.dialog_error_data_error_message).show();
    }
}</span>

6.构建我们自己的activity继承自上面的DatadroidActivity, 在想要打开摄像头的时候,只需要从请求工厂中拿到openCamera的请求,用请求管理器来执行这个请求,并把该请求放入到请求队列中.....最后openCamera的结果就会通过onRequestFinished的回调来获取,整个过程还是比较简单的.

<span style="font-family:Microsoft YaHei;font-size:14px;">public class CameraActivity extends DataDroidActivity
							implements ActionBar.OnNavigationListener, RequestListener,
										ConnectionErrorDialogListener{
	private String TAG = CameraActivity.class.getSimpleName();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_camera);
		Log.i(TAG, "CameraActivity has been created");
		Request openCameraRequest = CameraRequestFactory.getOpeningCameraOperation(Definition.CameraType.Default);
        mRequestManager.execute(openCameraRequest, this);
        mRequestList.add(openCameraRequest);
	}

	@Override
	public void onRequestFinished(Request request, Bundle bundle) {
        if (mRequestList.contains(request)) {
            setProgressBarIndeterminateVisibility(false);
            mRequestList.remove(request);
            int choose = bundle.getInt(CameraRequestFactory.BUNDLE_EXTRA_SWITCH);
            switch(choose){
            case CameraRequestFactory.REQUEST_TYPE_OPEN_CAMERA:{
            	boolean openCameraStatus = false;
            	openCameraStatus = bundle.getBoolean(CameraRequestFactory.BUNDLE_EXTRA_OPEN_CAMERA);
            	if(openCameraStatus){
            		Log.i(TAG, "open camera succeed");
            	}else{
            	}
            	break;
            }
            }
        }
	}
}</span>

时间: 2024-10-19 13:19:23

Android 开发中使用开源框架 DataDroid的相关文章

Android开发常用流行开源框架记录

发掘了一些Android常用开源框架,记录并分享,希望能在开发当中帮到大家. 缓存: 名称:DiskLruCache 描述:Java实现基于LRU的硬盘缓存 源码地址(可能需要翻墙) 作者:guolin 相关博客:Android DiskLruCache完全解析,硬盘缓存的最佳方案 图片加载: Android-Universal-Image-Loader 描述:一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示.所以,如果你的程序里需要这个功能的话,那么不妨

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

Android开发中无处不在的设计模式——原型模式

不知不觉这个系列已经写了三篇了,其实很早之前就想写设计模式了,只不过怕自己误人子弟没有提笔去写.后来在实际开发中,发现设计模式可以让一个开发人员融会贯通所学的知识,为了进一步巩固自己,就写下了这一些列文章.前面介绍了三个模式. Android开发中无处不在的设计模式--单例模式 Android开发中无处不在的设计模式--Builder模式 Android开发中无处不在的设计模式--观察者模式 本篇文章介绍的模式其实很简单,即原型模式,按照惯例,先看定义. 用原型实例指定创建对象的种类,并通过拷贝

Android 开发中的日常积累

欢迎Star,Fork https://github.com/lizhangqu/CoreLink 里面记录了开发过程中有用的东西,欢迎补充,不定时更新. Android 性能优化 Android内存优化之OOM Android最佳性能实践(1):合理管理内存 Android最佳性能实践(2):分析内存的使用情况 Android最佳性能实践(3):高性能编码优化 Android最佳性能实践(4):布局优化技巧 Android 加固与反编译 Apktool dex2jar DecompileApk

MVP模式在Android开发中的最佳实践

这篇文章拖了好久了,一直存在草稿箱里没有继续写,趁今天有空,撸撸完. 回想一下,你刚刚学习Android的时候,总会看到一些书上写着,Android使用的是MVC模式,Activity就是一个Controller,或许那个时候,你没有什么深刻的体会.随着经验的积累.你发现,Activity既是Controller,掌管着许许多多的业务逻辑,同时它也作为View的一部分,控制着视图层的显示.久而久之,这个Controller便显得过于重,职责不再那么单一. 于是,再后来,为了使Activity的职

Android开发中无处不在的设计模式——策略模式

这个系列停更了好久了,差不多可以重新拿起来更一篇了,这篇文章主要介绍策略模式.在这之前,先温习一下前面介绍的4种模式. 设计模式很重要! 设计模式很重要! 设计模式很重要! 重要的事说三遍!!! Android开发中无处不在的设计模式--单例模式 Android开发中无处不在的设计模式--Builder模式 Android开发中无处不在的设计模式--观察者模式 Android开发中无处不在的设计模式--原型模式 接着看下策略模式的定义 策略模式定义了一些列的算法,并将每一个算法封装起来,而且使它

Android开发中常见的设计模式

对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的同学,这里推荐2本书.一本是Head First系列的Head Hirst Design Pattern,英文好的可以看英文,可以多读几遍.另外一本是大话设计模式. 单例模式 首先了解一些单例模式的概念. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这样做有以下几个优点 对于

关于jsp商城开发中一些常用框架的介绍

Struts跟Tomcat.Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使java商城产品以及jsp商城开发者能更深入的了解其内部实现机制.除此之外,在 java商城开发 中Struts的优点主要集中体现在两个方面:Taglib和页面导航.Taglib是Struts的标记库,比较灵活,能大大提高开发效率.另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点.struts历经6年多的发展,是目前用户数最