參考鏈接悔据,自我總結(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)的頂層殷勘。