Reteofit And Rxjava

啊,經(jīng)過一天的研究對(duì)Retrofit和Rxjava終于有了一定的了解,俗話說的好,好好記性不如爛筆頭,于是寫個(gè)筆記,順便劃個(gè)水。嘿嘿嘿。


1. Retrofit

Retrofit是一個(gè)網(wǎng)絡(luò)請(qǐng)求框架,為啥Retrofit能夠在那么多的請(qǐng)求框架中脫引而出呢,個(gè)人覺得就是Retrofit的擴(kuò)展性,集成Rxjava,Gson等,只是一句話的事情,就像chrome一樣,以前一直覺得chrome很不好用,但是自從翻了墻,插件一安,瞬間覺得chrom碉堡了,

學(xué)習(xí)Retrofit第一步,就是要學(xué)習(xí)Retrofit的語法(從代碼的角度來說,就是api),Retrofit由兩部分組成,

  1. 第一部分是Retrofit本身,創(chuàng)建一個(gè)Retrofit 語法如下:
    Retrofit retrofit = new Retrofit.builder() .baseUrl(baseurl).build();
    這是基本的Retrofit,如果想要擴(kuò)展的話,只需要添加需要擴(kuò)展的部分就可以了(比如擴(kuò)展Gson,okhttp設(shè)置,Rxjava等)。
  2. 第二部分是請(qǐng)求的Api,創(chuàng)建一個(gè)api語法如下,
    public interface Api{ @Get("index/{id}/{target}") Call(Bean) getIndex(@path("id)String id , @path(target)String target); }
    上面就是一個(gè)基本的api的創(chuàng)建,需要記得東西就是,Retroofit的注解,常用注解有,@get(聲明一個(gè)get請(qǐng)求的call)
    @Post(聲明一個(gè)post的call)
    @FormUrlEncoded(只有以表單方式提交的時(shí)候可以用這個(gè),)
    @Path(填充url中的占位符)
    @Query(填充url中的參數(shù) 比如 "/index?id=1&name=job" )
    @File(填充post表單提交請(qǐng)求的單條內(nèi)容,對(duì)應(yīng)http header 里面appliacation/x-www.....)
    @Body(相當(dāng)于一個(gè)File的集合,然后將全部要submit的數(shù)據(jù),放到一個(gè)bean里面,Retrofit會(huì)自動(dòng)拆分bean中的每一個(gè)K-V,然后一個(gè)個(gè)放到post請(qǐng)求的body里面,所以這里的bean不需要序列化,bean會(huì)被自動(dòng)轉(zhuǎn)換為json,對(duì)應(yīng)http請(qǐng)求header里面的appliacation/json,)
  3. 當(dāng)Retrofit與Rxjava一起使用的時(shí)候, 需要改變的東西只有,api中的方法的返回值變?yōu)镺bservable<Bean>即可。
  4. 當(dāng)單獨(dú)使用Retrofit的時(shí)候,代碼如下;
    Api api= retrofit.create(Api.class); api.execute();
    上面是Retrofit的同步使用方法;異步使用方法如下
    Api api = retrofit.create(Api.class); api .enqune(new Callback(){ @override void success(Response response){ } @override void error(){ } )

2. Rxjava

Rxjava相對(duì)于Retrofit,就比較有難度了,Rxjava源碼找個(gè)時(shí)間研究一哈,現(xiàn)在把自己知道的Rxjava基本用法寫下來。
開始之前,先背幾個(gè)單詞,

Subscribe
Subscriber
SubscribeOn

Observer
Observable
Observeon

FunX ----- OnSubscribe
ActionX ---- Subscriber

Subscriber接口與Observer接口的功能相似,并且多了幾個(gè)功能,所以盡量使用Subscriber,而對(duì)于ActionX來說,是對(duì)Subscriber的簡(jiǎn)單封裝。
Observable.OnsubScribe 是創(chuàng)建Obervabl時(shí),需要實(shí)現(xiàn)的接口,比如:
Observable observable = new Observable(new Observable.OnSubscribe<T>(){ @override public void call(Subscriber<? super T > Subscriber) { //Subscriber 就是觀察者,在這里執(zhí)行oNnext等 }) 這里有一個(gè)疑問,就是對(duì)于Rxjava的lift方法和這里的這個(gè)Call有什么關(guān)系。

當(dāng)Retrofit與Rxjava一起使用的時(shí)候,Observable的創(chuàng)建就不需要上面這種方式了,取而代之的是Retrofit的是由create( interface api)的返回值來創(chuàng)建Observable。

重點(diǎn):

  1. Rxjava處理數(shù)據(jù)的各種方法,簡(jiǎn)直了,
  2. Rxjava的線程切換 ,
    其中 , SubscribeOn只有第一次是生效的,第二次使用SubsribeOn的時(shí)候,不會(huì)有效果,但是SubscribeOn在一個(gè)地方有奇效,那就是配合doOnSubscribe()的時(shí)候,講doOnSubscribe這個(gè)方法,就要講一下Subscriber的Onstart方法,著個(gè)方法是Subscriber的一個(gè)不需要強(qiáng)制實(shí)現(xiàn)的方法,onStart著個(gè)方法執(zhí)行的時(shí)間是subscribe之前,onstart執(zhí)行的線程一定是調(diào)用subscribe()著個(gè)方法所在的線程,不能設(shè)置,但是doOnSubscrib()這個(gè)方法可以設(shè)置運(yùn)行線程,并且doOnsubscribe()的執(zhí)行時(shí)間是在subscribe()執(zhí)行后事件發(fā)生之前,而subscribeOn()這個(gè)方法如果在doOnSubscribe之后的話,就可以指定doOnSubscribe()這個(gè)方法執(zhí)行的線程。

action 代表一個(gè)事件結(jié)束
fun 代表一個(gè)事件開始?
對(duì)于fun和action ,理解他們是接口就可以了,只不過有時(shí)候可以用他們來代替subscriber和onsubscribe,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容