Retrofit&rxjava初體驗

前言

看到網(wǎng)上非?;馃岬膔etrofit+rxjava的網(wǎng)絡(luò)框架,自己也動手試著搭建了下,不得不吐槽一波!坑~坑-坑真的是坑!

因為度娘給的都是之前的老版本的集成方法,鄙人按照之前的方法去配置,各種Crash。后來,在大google和自己瞎倒騰下終于是把請求給走通了。下面羅列一下搭建過程(Android studio 搭建)。

retrofit相關(guān)配置

使用的版本

  1. retrofit:2.2.0
  2. rxandroid:2.0.1
  3. rxjava:2.0.9

build.gradle文件

compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:retrofit-adapters:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
compile 'io.reactivex.rxjava2:rxjava:2.0.9'

注意上面第四行的adapter-rxjava2:2.2.0中一定寫上rxjava==2==,老的博客里面都是配置的是的是rxjava這里也是遇到各種坑,不寫上2的話會報Unable to create call adapter for io.reactivex.Observable的異常導致閃退

AndroidManifest.xml配置

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

步入正題,retrofit的初始化以及demo

初始化retrofit

直接上代碼

public class ApiService {

    //獲取單例
    public static HttpInterface getApiService() {
        return getInstance().mHttpInterface;
    }

    //在訪問HttpMethods時創(chuàng)建單例
    private static class SingletonHolder {
        private static final ApiService INSTANCE = new ApiService();
    }

    private static ApiService getInstance(){
        return SingletonHolder.INSTANCE;
    }

    private HttpInterface mHttpInterface;

    private ApiService() {
        Retrofit retrofit = new Retrofit.Builder().
                baseUrl("http://ent.sipmch.com.cn").
                addConverterFactory(GsonConverterFactory.create()).
                addCallAdapterFactory(RxJava2CallAdapterFactory.create()).
                build();
        mHttpInterface = retrofit.create(HttpInterface.class);
    }
}

定義接口

public interface HttpInterface {
    @FormUrlEncoded
    @POST("/ModuleDefaultCompany/RentManage/SearchRentNo/")
    Observable<RoomResult> search(@Field("CertNo") String idNo);
}

返回結(jié)果的JsonBean

public class RoomResult {
    public String result;
    public String prompWord;
}

方法調(diào)用

                        Apiservice.getService().search(account)
                            .subscribeOn(Schedulers.newThread())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(roomResult -> {
                                Utils.showToast(mActivity,roomResult.prompWord);
                            });

好了大功告成。

其它

最近也是自己在研究App框架的搭建,也是準備做個一個全新的App Demo出來。現(xiàn)在采用的是的MVP+retrofit+rxjava+greenDao+butterKnif

項目地址https://github.com/MissMyDearBear/Diary

非常感謝大家的反饋和建議:

QQ:2280885690

郵箱:2280885690@qq.com

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

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

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