Retrofit 学习总结

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);
}

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 () );
    }
} );

 9,@FieldMap(和@Field注解方式类似)

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)













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值