RxJava,RxAndroid,Retrofit使用

參開文章: 主要是扔物線大神給安卓開發(fā)者的詳解,還有很多很多的文章;然后我這邊就只寫我自己的代碼,網(wǎng)上很多文章都很好完全能夠明白.

項(xiàng)目準(zhǔn)備使用RxJava,RxAndroid,Retrofit開發(fā),然后就自己研究了幾天,今天開始項(xiàng)目,就網(wǎng)絡(luò)下載進(jìn)行了分裝,然后結(jié)合各路大神的文章,還有知乎的一些做了這個(gè).

主要是

這個(gè)主要是就是對下載進(jìn)行一個(gè)封裝,然后就是可以根據(jù)json格式進(jìn)行轉(zhuǎn)換,主要是相同部分,開始的位置進(jìn)行下載成功與否的判斷,然后把data部分保留下來,用到了一個(gè)map的操作符.剩下的就是基本都一樣,下載完事之后進(jìn)行調(diào)用就OK了;

比如類似這種格式的

{
    "code": "2",
    "message": "OK",
    "data": "數(shù)據(jù)",
}

下面是項(xiàng)目的代碼直接上

  • 添加依賴
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.1.6'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'

添加依賴的時(shí)候好多人說的不是很一樣,然后我自己的話就這樣添加的,至于為啥,我也不知道,這個(gè)目前沒有錯(cuò), 也不知道是不是對的(當(dāng)然我的下載是沒有問題的)

  • 然后就是弄了三個(gè)類


  • ApiService.class
    這個(gè)類主要是,,,,看代碼就行了,,, 請求前面不要加"/",添加會(huì)報(bào)404,這個(gè)要注意,也可加添加Headers,我實(shí)在代碼設(shè)置Okhttp的時(shí)候添加的;

    @GET("test")
    Observable getTest(@Query("a") int a);

就是這樣的一個(gè)get請求,后面的大家應(yīng)該都知道

  • HttpRetrofit.class
    這個(gè)類主要就是進(jìn)行一些初始化.然后就是設(shè)置一些東西,然后就是綁定訂閱, 這邊的話是把Observable和Subscriber設(shè)置了泛型T進(jìn)行連接,這樣的話早設(shè)置線程轉(zhuǎn)換的時(shí)候就不用重復(fù)添加代碼了.看代碼

/**
 * Created by zhiguo on 2016/7/11.
 * 封裝了一個(gè)RX系列網(wǎng)絡(luò)下載的類    這邊主要是做一些配置和初始化
 */
public class HttpRetrofit{

    private static OkHttpClient okHttpClient;

    public HttpRetrofit(){
        okHttpClient = new OkHttpClient();
        setOkHttpClient();
    }

    /**
     * 設(shè)置調(diào)用OkHttpClient
     */
    private void setOkHttpClient(){
        

        okHttpClient.newBuilder()
                .addInterceptor(loggingInterceptor)
                .retryOnConnectionFailure(true)
                .addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request()
                        .newBuilder()
                        .build();
                return chain.proceed(request);
            }
        });
    }

    /**
     * 初始化retrofit
     * @return
     */
    public Retrofit getRetrofit(){

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://api.lafeng.com/")  //服務(wù)器地址
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        return retrofit;
    }

    /**
     * 封裝調(diào)用   主要是設(shè)置訂閱的線程轉(zhuǎn)換
     * @param observable
     * @param subscriber
     * @param 
     */
    public  void httpSubscribe(Observable observable, Subscriber subscriber){
        observable
                .map(new Func1() {
                    @Override
                    public T call(T t) {
                        //在這里進(jìn)行轉(zhuǎn)化, 進(jìn)行json外層部分的判斷并返回

                        return t;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .unsubscribeOn(Schedulers.io())
                .subscribe(subscriber);
    }

    /**
     * 關(guān)聯(lián)接口類
     * @return
     */
    public  ApiService getApiService(){
        return getRetrofit().create(ApiService.class);
    }

}

我的注釋不是很多,基本都能明白,不過還是有一些坑的

  • HttpPost.class
    最后就是這個(gè)類,這個(gè)類是要是為了方便調(diào)用和統(tǒng)一管理,看一下就明白了,方便管理,可能也不是很有用
/**
 * Created by zhiguo on 2016/7/11.
 * 這個(gè)類只要是設(shè)置下載返回的類      返回的結(jié)果在Subscriber
 */
public class HttpPost {

   private static HttpRetrofit httpRetrofit = new HttpRetrofit();

    public static void getTest(Subscriber subscriber){
        httpRetrofit.httpSubscribe(httpRetrofit.getApiService().getTest(0),subscriber);
    }


}

好了,代碼就這些,然后就是TestBean.class,這個(gè)類隨便搞;

調(diào)用是這樣的

  HttpPost.getTest(new Subscriber() {

                    @Override
                    public void onNext(TestBean t) {

                        textView.setText(t.toString());
                    }

                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {
                        e.printStackTrace();
                    }
                });

好,完事了,基本是可以的用的,其他的細(xì)節(jié)方面在弄弄;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末今妄,一起剝皮案震驚了整個(gè)濱河市毙驯,隨后出現(xiàn)的幾起案子节槐,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴鸵,死亡現(xiàn)場離奇詭異吩跋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窖认,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門豫柬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扑浸,你說我怎么就攤上這事烧给。” “怎么了喝噪?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵础嫡,是天一觀的道長。 經(jīng)常有香客問我酝惧,道長榴鼎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任晚唇,我火速辦了婚禮巫财,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哩陕。我一直安慰自己平项,他們只是感情好赫舒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著闽瓢,像睡著了一般接癌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸳粉,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天扔涧,我揣著相機(jī)與錄音,去河邊找鬼届谈。 笑死枯夜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艰山。 我是一名探鬼主播湖雹,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼曙搬!你這毒婦竟也來了摔吏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤纵装,失蹤者是張志新(化名)和其女友劉穎征讲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橡娄,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诗箍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挽唉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滤祖。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瓶籽,靈堂內(nèi)的尸體忽然破棺而出匠童,到底是詐尸還是另有隱情,我是刑警寧澤塑顺,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布汤求,位于F島的核電站,受9級特大地震影響茬暇,放射性物質(zhì)發(fā)生泄漏首昔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一糙俗、第九天 我趴在偏房一處隱蔽的房頂上張望勒奇。 院中可真熱鬧,春花似錦巧骚、人聲如沸赊颠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竣蹦。三九已至顶猜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痘括,已是汗流浹背长窄。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纲菌,地道東北人挠日。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像翰舌,于是被迫代替她去往敵國和親嚣潜。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345