Retrofit+Okhttp+RxJava

很多朋友接手項目都開始帶有Retrofit +Okhttp+RxJava搭建的網(wǎng)絡請求框架花枫,甚至有的還在嘗試準備使用這個馋没,接下來就來介紹一下這個網(wǎng)絡請求框架的大致使用方法,和具體搭建方法撒顿。

直接上代碼,首先是BaseView

publicinterfaceBaseView1?{

/**

*?顯示操作進度

*/

publicvoidshowProgress();

/**

*?關(guān)閉進度

*/

publicvoidcloseProgress();

/**

*?成功回調(diào)

*/

publicvoidexcuteErrSuccessCallBack(String?s);

/**

*?失敗回調(diào)

*/

publicvoidexcuteErrFailedCallBack(String?s);

}

然后就是寫實現(xiàn)BaseView的Api了芍耘,一般是將自己網(wǎng)絡請求原地址寫上去

importandroid.os.Build;

importcom.google.gson.Gson;

importcom.google.gson.GsonBuilder;

importcom.lvgou.distribution.bean.CallBackVo;

importcom.lvgou.distribution.presenter.ErrorLogPresenter;

importcom.lvgou.distribution.view.BaseView1;

importcom.squareup.okhttp.OkHttpClient;

importjava.util.concurrent.TimeUnit;

importretrofit.GsonConverterFactory;

importretrofit.Retrofit;

importretrofit.RxJavaCallAdapterFactory;

importrx.Subscriber;

/**

*?Created?by?Administrator?on?2016/9/9.

*/

publicclassApiimplementsBaseView1?{

privatestaticApi?ourInstance;

privateIServiceAPI?gankService;

privateErrorLogPresenter?errorLogPresenter;

publicstaticApi?getInstance()?{

if(ourInstance?==null)?ourInstance?=newApi();

returnourInstance;

}

publicbooleanisOne?=true;

privateApi()?{

OkHttpClient?okHttpClient?=newOkHttpClient();

okHttpClient.setReadTimeout(7676,?TimeUnit.MILLISECONDS);

errorLogPresenter?=newErrorLogPresenter(this);

isOne?=true;

/*

*?查看網(wǎng)絡請求發(fā)送狀況

*/

//????????????if?(EasyApplication.getInstance().log)?{

//????????????????okHttpClient.interceptors().add(chain?->?{

//????????????????????Response?response?=?chain.proceed(chain.request());

//????????????????????com.orhanobut.logger.Logger.d(chain.request().urlString());

//????????????????????return?response;

//????????????????});

//????????????}

Gson?mGson?=newGsonBuilder()

.registerTypeAdapter(String.class,newDeserializerData())

.create();

Retrofit?retrofit?=newRetrofit.Builder().baseUrl("原網(wǎng)絡請求地址")

.addCallAdapterFactory(

RxJavaCallAdapterFactory.create())

.addConverterFactory(GsonConverterFactory.create(mGson))

.client(okHttpClient)

.build();

this.gankService?=?retrofit.create(IServiceAPI.class);

}

publicIServiceAPI?getGankService()?{

returngankService;

}

/**

*?創(chuàng)建?Subscriber

*

*?@param?mICallBackListener

*?@return?Subscriber

*/

publicSubscriber?createSubscriber(finalICallBackListener?mICallBackListener)?{

Subscriber?mSubscriber?=newSubscriber()?{

@Override

publicvoidonCompleted()?{

//????????????????Log.i(TAG,?"[onCompleted]");

}

@Override

publicvoidonError(Throwable?e)?{

//????????????????Log.e(TAG,?"[onError]"?+?e.getMessage());

CallBackVo?mCallBackVo?=newCallBackVo();

//????????????????mCallBackVo.setResCode("400");

//????????????????mCallBackVo.setResMsg("請求失敗");

//????????????????mCallBackVo.setResObj(null);

return;

}

@Override

publicvoidonNext(String?s)?{

Gson?gosn?=newGson();

CallBackVo?mCallBackVo?=?gosn.fromJson(s,?CallBackVo.class);

if(mCallBackVo.getStatus().equals("1"))?{

mICallBackListener.onSuccess(s);

}else{

mICallBackListener.onFaild(mCallBackVo.getMessage());

}

}

};

returnmSubscriber;

}

@SuppressWarnings("static-access")

publicstaticString?GetDeviceName()?{

returnnewBuild().MODEL;

}

@Override

publicvoidshowProgress()?{

}

@Override

publicvoidcloseProgress()?{

}

@Override

publicvoidexcuteErrSuccessCallBack(String?s)?{

}

@Override

publicvoidexcuteErrFailedCallBack(String?s)?{

}

}

這樣就完成了第一步,接下來就是網(wǎng)上很多的retrofit的運用熄阻,怎么去傳遞參數(shù)問題斋竞,對于這個我只是舉例我post上傳的方式,其它的去網(wǎng)上其它位子copy一下就行了

publicinterfaceIServiceAPI?{

@FormUrlEncoded

@POST("網(wǎng)絡請求鏈接尾")

Observable?shareMedal(@Field("參數(shù)名字")?String?參數(shù)值,@Field("參數(shù)名字")?String?參數(shù)值);

}

剩下就來看怎么去調(diào)用這個網(wǎng)絡請求了

publicclassShareMedalImplimplementsShareMedalModel?{

@Override

publicvoidshareMedal(String?參數(shù)值,String?參數(shù)值,?ICallBackListener?callBackListener)?{

IServiceAPI?mIServiceAPI?=?Api.getInstance().getGankService();

mIServiceAPI.shareMedal(參數(shù)值,?參數(shù)值)

//?Subscriber前面執(zhí)行的代碼都是在I/O線程中運行

.subscribeOn(Schedulers.io())

//?操作observeOn之后操作主線程中運行.

.observeOn(AndroidSchedulers.mainThread())

.subscribe(Api.getInstance().createSubscriber(callBackListener));

}

}

這個就是調(diào)用第一步饺律,獲取到callback窃页,然后進行post那邊的調(diào)用

后面那個Model實際就是一個interface,就寫上

voidshareMedal(String?參數(shù)值,String?參數(shù)值,?ICallBackListener?callBackListener)跺株;

這個方法而已

接下來就是presenter層了复濒,也就是最后層,就是對上面的這些的調(diào)用乒省,然后想辦法返回出去自己請求網(wǎng)絡的結(jié)果巧颈,是失敗還是成功什么的。

publicclassShareMedalPresenterextendsBasePresenter?{

privateShareMedalImpl?shareMedalImpl;

privateShareMedalView?shareMedalView;

privateHandler?mHandler;

publicShareMedalPresenter(ShareMedalView?shareMedalView)?{

this.shareMedalView?=?shareMedalView;

shareMedalImpl?=newShareMedalImpl();

mHandler?=newHandler(Looper.getMainLooper());

}

publicvoidshareMedal(String?參數(shù),?String?參數(shù))?{

shareMedalImpl.shareMedal(參數(shù),參數(shù),newICallBackListener()?{

@Override

publicvoidonSuccess(finalString?s)?{

mHandler.post(newRunnable()?{

@Override

publicvoidrun()?{

shareMedalView.closeShareMedalProgress();

shareMedalView.OnShareMedalSuccCallBack("1",?s);

}

});

}

@Override

publicvoidonFaild(finalString?s)?{

mHandler.post(newRunnable()?{

@Override

publicvoidrun()?{

shareMedalView.closeShareMedalProgress();

shareMedalView.OnShareMedalFialCallBack("1",?s);

}

});

}

});

}

}

接下來要寫的ShareMedalView這個也就是你調(diào)用實例化presenter位子要實現(xiàn)這個接口袖扛,然后實現(xiàn)方法的位子砸泛,就是new ?Presenter(this),這里this是讓當前類實現(xiàn)方法,會實現(xiàn)三個方法蛆封,也就是下面view要寫出來的抽象方法:

publicinterfaceShareMedalView?{

/**

*?成功回調(diào)

*

*?@param?state

*?@param?respanse

*/

voidOnShareMedalSuccCallBack(String?state,?String?respanse);

/**

*?失敗回調(diào)

*

*?@param?state

*?@param?respanse

*/

voidOnShareMedalFialCallBack(String?state,?String?respanse);

/**

*?關(guān)閉彈窗

*/

voidcloseShareMedalProgress();

}

對了唇礁,釣了一個basepresenter,這個也就是一個基類惨篱,寫上也無妨

[java]view plaincopy

publicabstractclassBasePresenter?{

publicT?mView;

publicCompositeSubscription?mCompositeSubscription;

publicDataManager?mDataManager;

publicvoidattach(T?mView){

this.mView=mView;

this.mCompositeSubscription?=newCompositeSubscription();

//????????this.mDataManager?=?DataManager.getInstance();

}

publicvoiddettach(){

mView=null;

this.mCompositeSubscription.unsubscribe();

this.mCompositeSubscription?=null;

//????????this.mDataManager?=?null;

}

publicbooleanisViewAttached()?{

returnmView?!=null;

}

publicT?getMvpView()?{

returnmView;

}

}

調(diào)用的時候?qū)嵗?/p>

shareMedalPresenter = new ShareMedalPresenter(this);

shareMedalPresenter .sharemedal()方法就行了

哈哈盏筐,就這么簡單,再也不要為Retrofit+Okhttp+RxJava這個框架煩惱了砸讳,其實也沒什么高端的琢融,不會用的時候永遠覺得遙不可及,當切身使用就覺得沒什么難的了簿寂。


csdn項目地址:http://blog.csdn.net/greatdaocaoren/article/details/74555729

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漾抬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子常遂,更是在濱河造成了極大的恐慌纳令,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克胳,死亡現(xiàn)場離奇詭異泊碑,居然都是意外死亡,警方通過查閱死者的電腦和手機毯欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門馒过,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酗钞,你說我怎么就攤上這事腹忽±蠢郏” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵窘奏,是天一觀的道長嘹锁。 經(jīng)常有香客問我,道長着裹,這世上最難降的妖魔是什么领猾? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮骇扇,結(jié)果婚禮上摔竿,老公的妹妹穿的比我還像新娘。我一直安慰自己少孝,他們只是感情好继低,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稍走,像睡著了一般袁翁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婿脸,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天粱胜,我揣著相機與錄音,去河邊找鬼狐树。 笑死焙压,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的褪迟。 我是一名探鬼主播冗恨,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼味赃!你這毒婦竟也來了掀抹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤心俗,失蹤者是張志新(化名)和其女友劉穎傲武,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體城榛,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡揪利,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狠持。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟位。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖喘垂,靈堂內(nèi)的尸體忽然破棺而出甜刻,到底是詐尸還是另有隱情绍撞,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布得院,位于F島的核電站傻铣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祥绞。R本人自食惡果不足惜非洲,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜕径。 院中可真熱鬧两踏,春花似錦、人聲如沸丧荐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虹统。三九已至,卻和暖如春隧甚,著一層夾襖步出監(jiān)牢的瞬間车荔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工戚扳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忧便,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓帽借,卻偏偏與公主長得像珠增,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砍艾,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容