Retrofit 支持网络请求方式:DELETE,GET,HEAD(注意HEAD方法的返回值类型必须是Void类型),PATCH,POST,PUT,OPTIONS;
所有支持的网络请求方式都是通过注解方式来实现的。
例如:
public interface GitHubService {
@GET("users/repos")
Call<List<Repo>> listRepos(@Query ("user") String user);
}
一下是Retrofit支持的所有注解的使用说明(除了网络请求方式注解)
一下测试网址("https://www.baidu.com/s?wd=1&ws=1")
1,@Query(在网址"?"后面的参数部分键值对)
interface test{ @POST("s") Call<Entity> test(@Query ( "wd" ) int para1,@Query ( "ws" ) int para2); } 2,@QueryMap(如果网址问号"?"后面的参数比较多的 情况下可以考虑用这个注解) 例如interface test{ @POST("s") Call<Entity> test2( @QueryMap Map<String,String> pMap); } 3,@Url()(就是指定url的完整地址,注意使用@Url注解的时候不能和@Path注解同时使用,@Url注解不能放在@Query和@ @QueryMap注解之后。) 例如:@POST () Call<Entity> test( @Url() String url,@Query ( "wd" ) int currentVersionNumber, @Query ( "ws" ) int versionType); 调用的时候,这样调用Retrofit sRetrofit=new Retrofit.Builder ().baseUrl ( "http://www.baidu.com" ) .addConverterFactory ( GsonConverterFactory.create () ) .build (); test sTest=sRetrofit.create ( test.class ); sTest.test ( "https://www.baidu.com",1,1 ).enqueue ( new Callback< Entity > ( ) { @Override public void onResponse ( Call < Entity > call, Response< Entity > response ) { Log.i ( "------------Success---",response.body ().getData ().getUrl () ); } @Override public void onFailure ( Call < Entity > call, Throwable t ) { Log.i ( "------Fail---",t.getMessage () ); } } ); } 其中baseUrl不能为空,但可以为其他任何一个Url。 4,@Path(用于替代@POST("{a}/{b}")等网络请求方式中的{a},{b}的值) 例如 String Url="www.baidu.com/a/b?a=1;b=2";interface test{ @POST("{a}/{b}") Call<Entity> test( @Path ( "a" ) String a, @Path ( "b" ) String b, @Query ( "a" ) int pa, @Query ( "b" ) int pb); Call<Entity> test2( @QueryMap Map<String,String> pMap); }9,@FieldMap(和@Field注解方式类似)Retrofit sRetrofit=new Retrofit.Builder ().baseUrl (Url) .addConverterFactory ( GsonConverterFactory.create () ) .build (); test sTest=sRetrofit.create ( test.class ); sTest.test ("a","b",1,2 ).enqueue ( new Callback< Entity > ( ) { @Override public void onResponse ( Call < Entity > call, Response< Entity > response ) { Log.i ( "------------Success---",response.body ().getData ().getUrl () ); } @Override public void onFailure ( Call < Entity > call, Throwable t ) { Log.i ( "------Fail---",t.getMessage () ); } } ); 5,@Header(添加单个网络请求响应头数据) 例如:String Url="www.baidu.com/a/b?a=1;b=2";interface test{ @POST("{a}/{b}") Call<Entity> test(@Header("Accept-Ranges") header,@Header("Cache-Control") header2,@Path ( "a" ) String a, @Path ( "b" ) String b, @Query ( "a" ) int pa, @Query ( "b" ) int pb); Call<Entity> test2( @QueryMap Map<String,String> pMap); }Retrofit sRetrofit=new Retrofit.Builder ().baseUrl (Url) .addConverterFactory ( GsonConverterFactory.create () ) .build (); test sTest=sRetrofit.create ( test.class ); sTest.test ("bytes","public,max-age=31536000","a","b",1,2 ).enqueue ( new Callback< Entity > ( ) { @Override public void onResponse ( Call < Entity > call, Response< Entity > response ) { Log.i ( "------------Success---",response.body ().getData ().getUrl () ); } @Override public void onFailure ( Call < Entity > call, Throwable t ) { Log.i ( "------Fail---",t.getMessage () ); } } ); 6,@HeaderMap(使用方式和@Header注解类似,它是在网络请求响应头数据比较多的情况下使用,用一个Map集合 承载所有的响应头数据) 7,@FormUrlEncoded(将Url按照"UTF-8"的方式进行编码) 8,@Field(用于指定网络请求参数时候进行"UTF-8"编码,必须和@FormUrlEncoded一起使用) 例如String Url="www.baidu.com/a/b?a=1;b=2";interface test{ @FormUrlEncoded() @POST("{a}/{b}") Call<Entity> test(@Header("Accept-Ranges") header,@Header("Cache-Control") header2,@Path ( "a" ) String a, @Path ( "b" ) String b, @Field(value="a",encoded=false ) int pa, @Field(value= "b",encoded=false ) int pb); Call<Entity> test2( @QueryMap Map<String,String> pMap); }Retrofit sRetrofit=new Retrofit.Builder ().baseUrl (Url) .addConverterFactory ( GsonConverterFactory.create () ) .build (); test sTest=sRetrofit.create ( test.class ); sTest.test ("bytes","public,max-age=31536000","a","b",1,2 ).enqueue ( new Callback< Entity > ( ) { @Override public void onResponse ( Call < Entity > call, Response< Entity > response ) { Log.i ( "------------Success---",response.body ().getData ().getUrl () ); } @Override public void onFailure ( Call < Entity > call, Throwable t ) { Log.i ( "------Fail---",t.getMessage () ); } } );
10,@QueryName(类似与@Query,但它是将参数名称加在Url后面,不带有值)
12,@Multipart(必须和@Part()同时使用@Multipart()说明有文件下载,@Part()指定下载文件的路径)
13,@PartMap(和@Part()的功能类似)
14,@Body(就是将请求参数(请求体)通过指定的转换工厂转换成指定的格式,比如JavaBean转换为Json数据传输)
15,CallAdapter.Factory详解请看(http://blog.csdn.net/gengqiquan/article/details/52785773)