小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android 牛逼哄哄的快速開發(fā)框架AndroidOne,秒殺最火的Xutils

 放松神經(jīng) 2016-08-03
你還在為 App 開發(fā)技術(shù)選型而煩惱嗎?你還在每天花大量的時(shí)間在寫重復(fù)的代碼上嗎?沒錯(cuò)! 今天就是要給大家分享一款能節(jié)省大量時(shí)間 省去很多重復(fù)代碼coding 專注于邏輯思考的開發(fā)框架 oneCore 閃亮登場(chǎng)~!

一個(gè)牛逼哄哄的Android框架One

One框架能幫您帶來(lái)什么?

One框架分為兩個(gè)項(xiàng)目,OneCore為核心工程,androidOne為演示項(xiàng)目,依賴oneCore

One整個(gè)框架為MVC模式搭建,基于android framework為核心,集成Android世界中的主流技術(shù)選型

以Pragmatic風(fēng)格的Android應(yīng)用參考示例,是android項(xiàng)目最佳實(shí)踐的總結(jié)與演示

以“復(fù)雜的世界里,一個(gè)就夠了”為理念,勵(lì)志幫助Android開發(fā)人員快速搭建一個(gè)簡(jiǎn)單高效的android開發(fā)框架!

異步模塊

封裝EventBus類,將異步框架單獨(dú)抽出來(lái),任何耗時(shí)操作(不僅僅是網(wǎng)絡(luò)請(qǐng)求)都可以放到異步模塊里

與網(wǎng)絡(luò)模塊分離實(shí)現(xiàn),可以直接寫單元測(cè)試類測(cè)試接口,讓接口調(diào)試更方便

支持多并發(fā)、取消操作

多個(gè)請(qǐng)求,一個(gè)回調(diào)接口處理,讓頁(yè)面代碼更簡(jiǎn)潔

建議一般在BaseActivity、BaseFragment中實(shí)現(xiàn)

實(shí)現(xiàn)參考類 AsyncTaskManager.java

使用參考類 BaseActivity.java

使用參考類 BaseFragment.java

HTTP請(qǐng)求模塊

采用第三方AsyncHttpClient方案,支持http、https方式,支持get、post、put、delete方法,支持GZIP、File格式,支持Retry、Cacel策略,堪稱完美! 

改造實(shí)現(xiàn)SyncHttpClient,支持同步,并支持RESTFUL風(fēng)格,調(diào)接口時(shí)可直接單元測(cè)試

實(shí)現(xiàn)參考類 SyncHttpClient.java

DownloadManager資源下載模塊

改造實(shí)現(xiàn)BreakpointHttpResponseHandler支持多并發(fā)、多文件上傳、斷點(diǎn)續(xù)傳、暫停、繼續(xù)、刪除下載任務(wù)

[code]    /**
     * [下載器管理類,支持并發(fā)、暫停、繼續(xù)、刪除任務(wù)操作以及斷點(diǎn)續(xù)傳]
     * 
    DownloadManager downloadMgr = DownloadManager.getInstance();
    downloadMgr.setDownLoadCallback(new DownLoadCallback(){

        @Override
        public void onLoading(String url, int bytesWritten, int totalSize) {
            super.onLoading(url, bytesWritten, totalSize);
        }

        @Override
        public void onSuccess(String url) {
            super.onSuccess(url);
        }

        @Override
        public void onFailure(String url, String strMsg) {
            super.onFailure(url, strMsg);
        }
    });

    //添加下載任務(wù)
    downloadMgr.addHandler(url);
    * 
    **/


BluetoothManager藍(lán)牙處理模塊

[code]    /**
     * [藍(lán)牙管理類]
     * 
     */
    BluetoothManager bluetoothManager = BluetoothManager.getInstance(new BluetoothCallBack(){
        @Override
        public void onStateChange(int bluetoothState, String message) {
            switch(bluetoothState){
                //藍(lán)牙不可用
                case BluetoothService.STATE_UNAVAILABLE:
                    NToast.shortToast(mContext, "藍(lán)牙不可用");
                    break;

                //藍(lán)牙未連接
                case BluetoothService.STATE_NONE:
                    NToast.shortToast(mContext, "藍(lán)牙未連接");
                    break;

                //藍(lán)牙空閑
                case BluetoothService.STATE_LISTEN:
                    break;

                //藍(lán)牙正連接
                case BluetoothService.STATE_CONNECTING:
                    NToast.shortToast(mContext, "藍(lán)牙正連接");
                    break;

                //藍(lán)牙已連接, 當(dāng)如果連接上了,message就是藍(lán)牙的名稱
                case BluetoothService.STATE_CONNECTED:
                    NToast.shortToast(mContext, "藍(lán)牙已連接");
                    mBluetoothState = true;
                    break;
            }
        }

        @Override
        public void onResult(int requsetCode, String data) {
            //回調(diào)結(jié)果在頁(yè)面顯示

        }
    });

    //發(fā)送藍(lán)牙請(qǐng)求
    bluetoothManager.request(SEND_INL_CODE, charStr);

    //斷開
    bluetoothManager.stop();


Common模塊

頁(yè)面堆棧管理ActivityPageManager

各種自定義dialog

支持hybrid開發(fā) 

各種工具類

各種動(dòng)畫效果

SharedPreferences管理

支持直接put、get對(duì)象。

LruCache管理

封裝LruCache,只緩存CACHE_SIZE大小的數(shù)量,超過(guò)CACHE_SIZE自動(dòng)釋放前面的對(duì)象,建議頁(yè)面間傳參使用。

Exception系統(tǒng)異常處理

Bugtags是新一代的、專為移動(dòng)測(cè)試而生的缺陷發(fā)現(xiàn)及管理工具。移動(dòng)App集成Bugtags SDK后,測(cè)試人員就可以直接在App里所見即所得的提交 bug,SDK會(huì)自動(dòng)截屏、收集App運(yùn)行時(shí)數(shù)據(jù),如:設(shè)備信息,控制臺(tái)數(shù)據(jù),用戶的操作步驟等,團(tuán)隊(duì)人員在Bugtags云端高效的跟蹤及管理bug。

Parse解析管理

支持XML、JSON、JSOAP解析

一行代碼輕松轉(zhuǎn)JAVA對(duì)象

采用fastjson實(shí)現(xiàn)java、json互轉(zhuǎn)

采用xstream實(shí)現(xiàn)Java、xml互轉(zhuǎn),支持注解解析

自主封裝,支持soapObject轉(zhuǎn)Java對(duì)象

CacheManager緩存管理

磁盤緩存,緩存對(duì)象需實(shí)現(xiàn)序列化接口,提供讀取、失效,清除方法。一般用于對(duì)接口數(shù)據(jù)的緩存。

[code]   /**
     * 緩存使用示例
     * 
     * @return
     * @throws HttpException
     */
    public AdResponse getAdList() throws HttpException {
        AdResponse response = null;

        RequestParams params = getRequestParams();
        params.put("method", "fmms.getAdvertisementList");
        params.put("data", "{}");

        //根據(jù)請(qǐng)求得到唯一的緩存Key
        String key = getCacheKey(AdResponse.class.getSimpleName());

        //讀取緩存
        if(CacheManager.isInvalidCache(key, INVALID_TIME_1DAY)){
            response = CacheManager.readObject(key);
            if(response != null && response.isSuccess()){
                 return response;
            }
        }

        String result = httpManager.post(mContext, Constants.DOMAIN, getSignParams(params), ContentType);
        if(!TextUtils.isEmpty(result)){
            //一句話解析成對(duì)象
            response = jsonToBean(result, AdResponse.class);
            if(response != null && response.isSuccess()){
                 //獲取數(shù)據(jù)成功,寫入緩存
                CacheManager.writeObject(response, key);
            }
        }

        //最后都沒有數(shù)據(jù),還是從緩存中取
        if(response == null){
            response = CacheManager.readObject(key);
            if(response != null && response.isSuccess()){
                return response;
            }
        }

        return response;
    }


BroadcastManager廣播管理

為了發(fā)送廣播更加方便,自主封裝了BroadcastManager,方便好用。

[code]    /**
     * [BroadcastManager使用示例]
     * 
    //在任何地方發(fā)送廣播
    BroadcastManager.getInstance(mContext).sendBroadcast(FindOrderActivity.ACTION_RECEIVE_MESSAGE);

    //頁(yè)面在oncreate中初始化廣播
    BroadcastManager.getInstance(mContext).addAction(ACTION_RECEIVE_MESSAGE, new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent intent) {
            String command = intent.getAction();
            if(!TextUtils.isEmpty(command)){
                if((ACTION_RECEIVE_MESSAGE).equals(command)){
                    //獲取json結(jié)果
                    String json = intent.getStringExtra("result");
                    //做你該做的事情
                }
            }
        }
    });

    //頁(yè)面在ondestory銷毀廣播
    BroadcastManager.getInstance(mContext).destroy(ACTION_RECEIVE_MESSAGE);
    * 
    **/


DB模塊

采用GreenDaoORM方案,直接實(shí)現(xiàn)Java Object的CURD方法就可以操作數(shù)據(jù)庫(kù),非常好用,極力推薦。 

實(shí)現(xiàn)DBManager,連獲取Dao的代碼都不用寫了,不管通過(guò)DaoGenerator生成的對(duì)象如何變化,通過(guò)DBManager可以讓你拿到任何Dao對(duì)象,從而實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。

DaoGenerator工程自動(dòng)生成model、dao、session對(duì)象等代碼,拷過(guò)來(lái)直接使用即可。

[code]    /**
     * 數(shù)據(jù)庫(kù)示例
     */
    public void testDB(){

        NoteDao dao = DBManager.getInstance(getContext()).getDaoSession().getNoteDao();

        //add
        for(int i=0; i<=4; i++){
            Note bean = new Note();
            bean.setComment("comment");
            bean.setDate(new Date());
            bean.setText("text");
            dao.insert(bean);
        }

        //udpate
        List<Note> list = dao.loadAll();
        if(!list.isEmpty()){
            Note bean = list.get(2);
            bean.setComment("comment_comment");
            dao.update(bean);
        }

        //query
        if(!list.isEmpty()){
            for(Note note : list){
                NLog.e("testDemo", note.getComment());
            }
        }

        //delete
        if(!list.isEmpty()){
            dao.delete(list.get(0));
        }
    }


注解模塊

集成butterknife注解框架,一個(gè)No Magic的Android注入框架,用過(guò)的人都說(shuō)好,極力推薦。

支付模塊

集成支付寶支付和微信支付

支付寶示例:客戶端封裝參數(shù),調(diào)用支付寶

[code]    String PARTNER = "2088XXXXXXXXXXXX";
    String SELLER = "demo@yahoo.cn";
    String RSA_PRIVATE = "私鑰";
    PayUtils payutils = new PayUtils(activity, PARTNER, SELLER, RSA_PRIVATE, "服務(wù)器回調(diào)訂單地址[異步處理]");
    payutils.setPayListener(new PayListener() {
        @Override
        public void onPayResult(int state, String message) {

        }
    });

    try {
        payutils.pay("測(cè)試商品", "測(cè)試商品詳情", "0.01", "唯一訂單號(hào),服務(wù)器生成");
    } catch (Exception e) {
        e.printStackTrace();
    }


支付寶示例:服務(wù)器封裝所有的參數(shù),返回url直接調(diào)用支付寶

[code]    PayUtils1 payutils= new PayUtils1(BespeakActivity.this, new PayListener() {
        @Override
        public void onPayResult(int state, String message) {
            switch (state) {
                case PayUtils1.PAY_SUC_CODE:
                    MessageDialog dialog = new MessageDialog(mContext, getString(R.string.bespeak_order_suc));
                    dialog.setConfirmListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            BespeakActivity.this.finish();
                        }
                    });
                    dialog.show();
                    break;

                case PayUtils1.PAY_DOING_CODE:
                case PayUtils1.PAY_GOODS_CODE:
                case PayUtils1.PAY_INIT_CODE:
                case PayUtils1.PAY_FAIL_CODE:
                    NToast.shortToast(mContext, message);
                    break;
            }
        }
    });
    payutils.pay(res.getData().getUrl());


微信支付示例

[code]    PayReq payReq = res.getData().getPayReq();
    payReq.packageValue = "Sign=WXPay";
    IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null);
    msgApi.registerApp(Constants.WEIXIN_APP_ID);
    msgApi.sendReq(payReq);


圖片下載模塊

采用universal-image-loader解決方案,有關(guān)使用情況請(qǐng)參見universal-image-loader

為了提供用戶體驗(yàn),建議在listview或者gridview在滑動(dòng)的時(shí)候不加載圖片

[code]refreshlistview.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));


日志

NLog日志輸出類

config.properties文件(assets文件夾下)配置日志開關(guān)

[code]#is debug mode, if debug is true that log is open, if debug is false that log is close.
debug=true


教程

優(yōu)酷視頻教程地址,非常感謝融云阿明的辛苦錄制!

PPT手把手教程地址

結(jié)語(yǔ)

看到這里,估計(jì)您和您的小伙伴們都驚呆了吧!趕快動(dòng)手試試吧!

具體使用請(qǐng)參考androidOne演示工程。

我改變不了這個(gè)世界!這個(gè)世界也休想將我改變!

如果任何問(wèn)題或者建議,歡迎溝通。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多