Retrofit+Rxjava+okhttp《一》

參考鏈接悔据,自我總結(jié)一下,退出伸手黨紊扬!
下載利器
https://github.com/Tamicer/FastDownloader
RxAndroid之Rxlifecycle使用
http://blog.csdn.net/jdsjlzx/article/details/51527542
深入理解Java:注解(Annotation)自定義注解入門
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
http://gank.io/post/56e80c2c677659311bed9841
https://tamicer.github.io/2016/08/10/novate10/
http://blog.csdn.net/wzgiceman/article/details/51939574
Retrofit:
1.首先確保在AndroidManifest.xml中請(qǐng)求了網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
2.在app/build.gradle添加引用
/rx-android-java/
compile 'com.trello:rxlifecycle:1.0'//生命周期
compile 'com.trello:rxlifecycle-components:1.0'
/rotrofit/
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.jakewharton:butterknife:7.0.1'
3.常用注解
@Query照瘾、@QueryMap:用于Http Get請(qǐng)求傳遞參數(shù)
@Field:用于Post方式傳遞參數(shù),需要在請(qǐng)求接口方法上添加
@FormUrlEncoded,即以表單的方式傳遞參數(shù)
@Body:用于Post,根據(jù)轉(zhuǎn)換方式將實(shí)例對(duì)象轉(zhuǎn)化為對(duì)應(yīng)字符串傳遞參數(shù).
比如Retrofit添加GsonConverterFactory則是將body轉(zhuǎn)化為gson字符串進(jìn)行傳遞
@Path:用于URL上占位符
@Part:配合@Multipart使用,一般用于文件上傳
@Header:添加http header
@Headers:跟@Header作用一樣,只是使用方式不一樣,@Header是作為請(qǐng)求方法的參數(shù)傳入,@Headers是以固定方式直接添加到請(qǐng)求方法上
舉例:
<1>:如果想用表單 @FieldMap
@FormUrlEncoded
@POST("/url")
Call<T> postForm(@FieldMap Map<String , Object> maps);
<2>:如果直接用對(duì)象 @Body
@POST("url")
Call<T> PostBody(@Body Objects objects);
<3>:如果直接多參數(shù) @QueryMap
@PUT("/url")
Call<T> queryMap(@QueryMap Map<String, String> maps);
<4>:如果上傳文件 @Part
@Multipart
@POST("/url")
Call<ResponseBody> uploadFlie(@Part("description") RequestBody description,
@Part("files") MultipartBody.Part file);
<5>:如果多文件上傳 @PartMap()
@Multipart
@POST("{url}")
Call<T> uploadFiles(@Path("url") String url,
@PartMap() Map<String, RequestBody> maps);

常規(guī)問題

《一》 url被轉(zhuǎn)義:
http://api.myapi.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist
需要將@path改成@url
public interface APIService {
@GET Call<Users> getUsers(@Url String url);
}
或者:
public interface APIService {
@GET("{fullUrl}")
Call<Users> getUsers(@Path(value = "fullUrl", encoded = true) String fullUrl);
}
《二》Method方法找不到
java.lang.IllegalArgumentException: Method must not be null
請(qǐng)指定具體請(qǐng)求類型@get @post等
public interface APIService {
@GET Call<Users> getUsers(@Url String url);
}
《三》Url編碼不對(duì),@fieldMap parameters must be use FormUrlEncoded
如果用fieldMap加上FormUrlEncoded編碼
@POST()
@FormUrlEncoded
Observable<ResponseBody> executePost(@FieldMap Map<String, Object> maps);
上層需要轉(zhuǎn)換將自己的map轉(zhuǎn)換為FieldMap
@FieldMap(encoded = true) Map<String, Object> parameters,
《四》paht和url一起使用
Using @Path and @Url paramers together with retrofit2
java.lang.IllegalArgumentException: @Path parameters may not be used with @Url. (parameter #4
如果你是這樣的:
@GET
Call<DataResponse> getOrder(@Url String url,@Path("id") int id);
請(qǐng)?jiān)谀愕膗rl指定占位符.url:
www.myAPi.com/{Id}
4.注解(Annotation)自定義注解入門
元注解:元注解的作用就是負(fù)責(zé)注解其他注解飘蚯。Java5.0定義了4個(gè)標(biāo)準(zhǔn)的meta-annotation類型,它們被用來提供對(duì)其它 annotation類型作說明福也。
Java5.0定義的元注解:
1.@Target,2.@Retention,3.@Documented,4.@Inherited
《一》@Target:
@Target說明了Annotation所修飾的對(duì)象范圍:Annotation可被用于 packages局骤、types(類、接口暴凑、枚舉峦甩、Annotation類型)、類型成員(方法现喳、構(gòu)造方法凯傲、成員變量犬辰、枚舉值)、方法參數(shù)和本地變量(如循環(huán)變量泣洞、catch參數(shù))忧风。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標(biāo)。
  作用:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方)
  取值(ElementType)有:
    1.CONSTRUCTOR:用于描述構(gòu)造器
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部變量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述參數(shù)
    7.TYPE:用于描述類球凰、接口(包括注解類型) 或enum聲明
《二》@Retention:
  @Retention定義了該Annotation被保留的時(shí)間長(zhǎng)短:某些Annotation僅出現(xiàn)在源代碼中糖埋,而被編譯器丟棄码党;而另一些卻被編譯在class文件中;編譯在class文件中的Annotation可能會(huì)被虛擬機(jī)忽略保礼,而另一些在class被裝載時(shí)將被讀瘸远取(請(qǐng)注意并不影響class的執(zhí)行甩挫,因?yàn)锳nnotation與class在使用上是被分離的)。使用這個(gè)meta-Annotation可以對(duì) Annotation的“生命周期”限制椿每。
  作用:表示需要在什么級(jí)別保存該注釋信息伊者,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效)
  取值(RetentionPoicy)有:
    1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)

《三》@Documented:
  @Documented用于描述其它類型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化间护。Documented是一個(gè)標(biāo)記注解亦渗,沒有成員。
《四》@Inherited:
  @Inherited 元注解是一個(gè)標(biāo)記注解汁尺,@Inherited闡述了某個(gè)被標(biāo)注的類型是被繼承的法精。如果一個(gè)使用了@Inherited修飾的annotation類型被用于一個(gè)class,則這個(gè)annotation將被用于該class的子類痴突。
  注意:@Inherited annotation類型是被標(biāo)注過的class的子類所繼承搂蜓。類并不從它所實(shí)現(xiàn)的接口繼承annotation,方法并不從它所重載的方法繼承annotation辽装。
  當(dāng)@Inherited annotation類型標(biāo)注的annotation的Retention是RetentionPolicy.RUNTIME帮碰,則反射API增強(qiáng)了這種繼承性。如果我們使用java.lang.reflect去查詢一個(gè)@Inherited annotation類型的annotation時(shí)拾积,反射代碼檢查將展開工作:檢查class和其父類殉挽,直到發(fā)現(xiàn)指定的annotation類型被發(fā)現(xiàn),或者到達(dá)類繼承結(jié)構(gòu)的頂層殷勘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末此再,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玲销,更是在濱河造成了極大的恐慌输拇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贤斜,死亡現(xiàn)場(chǎng)離奇詭異策吠,居然都是意外死亡逛裤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門猴抹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來带族,“玉大人,你說我怎么就攤上這事蟀给◎觯” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵跋理,是天一觀的道長(zhǎng)择克。 經(jīng)常有香客問我,道長(zhǎng)前普,這世上最難降的妖魔是什么肚邢? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拭卿,結(jié)果婚禮上骡湖,老公的妹妹穿的比我還像新娘。我一直安慰自己峻厚,他們只是感情好响蕴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著目木,像睡著了一般换途。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刽射,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天军拟,我揣著相機(jī)與錄音,去河邊找鬼誓禁。 笑死懈息,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摹恰。 我是一名探鬼主播辫继,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼俗慈!你這毒婦竟也來了姑宽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤闺阱,失蹤者是張志新(化名)和其女友劉穎炮车,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘦穆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年纪隙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扛或。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绵咱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熙兔,到底是詐尸還是另有隱情悲伶,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布黔姜,位于F島的核電站拢切,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秆吵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一五慈、第九天 我趴在偏房一處隱蔽的房頂上張望纳寂。 院中可真熱鬧,春花似錦泻拦、人聲如沸毙芜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腋粥。三九已至,卻和暖如春架曹,著一層夾襖步出監(jiān)牢的瞬間隘冲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工绑雄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留展辞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓万牺,卻偏偏與公主長(zhǎng)得像罗珍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脚粟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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