Android 開源架構 DataDroid

來源:互聯網
上載者:User

標籤:android   開源架構   資料管理   網路攝影機   

Android 開源架構 DataDroid

DataDroid是基於Android平台的一個開源的開發庫,基於Android的RESTful封裝用來簡化Android應用中的資料管理.該開源庫的為 CSDN資源.

DataDriod 在Android項目中的使用
從github上clone下來的原始碼中就有很多種類型的資料管理的demo,這裡就簡單得描述一下通過DataDroid的工作流程進行一個開啟網路攝影機的過程.想看下面項目的源碼的可以去我的github查看,地址:Github
1.以單例模式建立一個要求管理器,這裡需要注意的是在構造父類的時候,需要將一個RequestService傳遞給要求管理器,在調用RequestManager的execute方法時,會啟動這個service.
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);
    }

}

2.建立一個請求工廠,來建立各種不同的請求,這裡就提供了一個返回開啟網路攝影機的請求.

public final class CameraRequestFactory {// Request typespublic 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;    }}
3.建立一個開啟網路攝影機的operation,開啟網路攝影機這個動作的所有操作都在這個operation中完成,並且完成之後可以通過bundle來將開啟的結果回調給調用的activity.

public class OpenCameraOperation implements Operation {private final String TAG = OpenCameraOperation.class.getSimpleName();public static final String PARAM_METHOD = "cn.jesse.camera.extra.cameraType";@Overridepublic 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;}}
4.建立RequestService,根據不同的請求類型提供與之相對應的operation.

public class CameraRequestService extends RequestService {@Overridepublic 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);    }}
5.建立datadroid的activity,提供對datadroid 請求和請求隊列的管理.

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();    }}
6.構建我們自己的activity繼承自上面的DatadroidActivity, 在想要開啟網路攝影機的時候,只需要從請求工廠中拿到openCamera的請求,用要求管理器來執行這個請求,並把該請求放入到請求隊列中.....最後openCamera的結果就會通過onRequestFinished的回調來擷取,整個過程還是比較簡單的.

public class CameraActivity extends DataDroidActivityimplements ActionBar.OnNavigationListener, RequestListener, ConnectionErrorDialogListener{private String TAG = CameraActivity.class.getSimpleName();@Overrideprotected 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);}@Overridepublic 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;            }            }        }}}


Android 開源架構 DataDroid

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.