retrofit2+RxJava2 的一些坑
今天開(kāi)發(fā)新項(xiàng)目,本著積極向上的學(xué)習(xí)態(tài)度,經(jīng)過(guò)多番考慮我決定使用retrofit2 + RxJava2來(lái)做為我的網(wǎng)絡(luò)請(qǐng)求......神說(shuō):你的想法非常好
- 先看一下我的 依賴配置
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.7'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
首先我們先來(lái)看幾個(gè)錯(cuò)誤,如果有符合你項(xiàng)目錯(cuò)誤的地方可以繼續(xù)看 因?yàn)槲叶家呀?jīng)調(diào)試好了沒(méi)辦法截圖我就把錯(cuò)誤復(fù)制進(jìn)來(lái)好了
- 第一個(gè)錯(cuò)誤
com.sun.jdi.internalException:Unexpected JDWP Error:103
- 第二個(gè)錯(cuò)誤
Unable to create call adapter for io.reactivex
- 第三個(gè)錯(cuò)誤
Method threw 'java.lang.IllegalArgumentException' exception.
- 第四個(gè)錯(cuò)誤
java.net.UnknownHostException: Unable to resolve host "h5www.kaixinwan.com": No address associated with hostname
- 今天集成的網(wǎng)絡(luò)框架 就報(bào)錯(cuò)了這個(gè)四個(gè)主要的錯(cuò)誤下面我根據(jù)我解決的問(wèn)題進(jìn)行解釋
- 一二三錯(cuò)誤是因?yàn)橐粋€(gè)問(wèn)題造成的 先看一下在哪里造成錯(cuò)誤的原因....在第二行造成的
baseApi = retrofit.create(BaseApi.class);
>>>>>Observable findObservable = baseApi.getFind(scy_type);<<<<<
- 當(dāng)時(shí)這個(gè)問(wèn)題我找了好多博客都是英文的(WTF)根本看不懂,最后想辦法自己解決吧,總不能寫(xiě)一半放棄,這也不是我性格,看了好多文章說(shuō)明,最后發(fā)現(xiàn)因?yàn)槿绻胷etrofit2的時(shí)候 是堅(jiān)決堅(jiān)決不能使用RxJava1的必須使用RxJava2
- 如果出現(xiàn)上述一二三問(wèn)題應(yīng)該在你的依賴中加入
舊的:compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
新的:compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
- 看好了這個(gè)是 rxjava2 : 2 . 2 . 0 我當(dāng)時(shí)看了半天感覺(jué)也一樣啊 它的后綴是rxjava2 :X.X.X
同時(shí) 記住是同時(shí)把以前的注釋掉 一定要注釋掉(我就忘記注釋掉了 導(dǎo)致還是報(bào)錯(cuò) 豬腦袋!!!)
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0-beta4' 網(wǎng)上說(shuō)加這個(gè)依賴
大家不用試了 不好使!!!!!
- 最后一步在retrofit中更改配置 添加RxJava2CallAdapterFactory.create()
retrofit = new Retrofit.Builder()
.baseUrl(BaseUrl)
.client(build)
.addConverterFactory(FastJsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
至此應(yīng)該能解決了.
第四個(gè)錯(cuò)誤 后臺(tái)給了我一個(gè)網(wǎng)址 我在網(wǎng)頁(yè)中可以打開(kāi) 在cmd中也可以ping通 但是用著個(gè)框架怎么調(diào)試都是報(bào)第四個(gè)錯(cuò)誤,框架告訴你找不到主機(jī)地址(找不到就對(duì)了),因?yàn)檫@個(gè)地址只能在虛擬機(jī)中進(jìn)行調(diào)試,而且還得配置虛擬機(jī)的host---把這個(gè)地址加進(jìn)去,,記住加進(jìn)去之后要加一個(gè)回車要不不生效(具體怎么配置 自行百度)
如果幫你解決了 給個(gè)喜歡唄