Retrofit学习笔记

Retrofit攻略

使用Retrofit首先必须添加下面三个;远程;依赖

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’

public interface BlueService {
   @GET("book/search")
   Call<BookSearchResponse> getSearchBooks(@Query("q") String name, 
        @Query("tag") String tag, @Query("start") int start, 
        @Query("count") int count);
}

类似上面的代码,@GET表示请求的方法,Call 是请求的返回结果,BookSearchResponse是返回的实体类(可以是Gson的解析类)

1 GET方法

@GET    表示是个get请求

1、 @Query  表示请求 参数
**如果一个参数是非必须传的那么可以传 null
**当出现一个参数对应多个值的时候Query可以对应一个集合 for example:
public interface BlueService {
    @GET("book/search")
    Call<BookSearchResponse> getSearchBooks(@Query("q") List<String> name);
}
2、 @QueryMap 当请求参数过多的时候可以把参数放到一个map当中,retrofit会帮助我们处理参数

3、@Path  当请求的相对地址;也需要我们传的时候需要用到@Path
    **@Path同事还可以用于Post和Delete请求

2 POST方法

1、@Field  类似于GET方法的Query但是是吧参数放在请求实体里,而不是拼接在url上面

2、@FieldMap   当请求有多个请求参数的时候就用@FieldMap类似于GET请求的QueruyMap

3、@Body    请求的参数是一个实体类,而且这个实体类的参数是可以没有get和set方法的,但是参数必须是公有的(Public)


4、@Part   上传文件

step:1 构造参数

public interface FileUploadService {  
    // 上传单个文件
    @Multipart
    @POST("upload")
    Call<ResponseBody> uploadFile(
            @Part("description") RequestBody description,
            @Part MultipartBody.Part file);

    // 上传多个文件
    @Multipart
    @POST("upload")
    Call<ResponseBody> uploadMultipleFiles(
            @Part("description") RequestBody description,
            @Part MultipartBody.Part file1,
            @Part MultipartBody.Part file2);
}

step:2 上传

Uri file1Uri = ... // 从文件选择器或者摄像头中获取 
Uri file2Uri = ... 

// 创建上传的service实例
FileUploadService service =  
        ServiceGenerator.createService(FileUploadService.class);

// 创建文件的part (photo, video, ...)
MultipartBody.Part body1 = prepareFilePart("video", file1Uri);  
MultipartBody.Part body2 = prepareFilePart("thumbnail", file2Uri);

// 添加其他的part
RequestBody description = createPartFromString("hello, this is description speaking");

// 最后执行异步请求操作
Call<ResponseBody> call = service.uploadMultipleFiles(description, body1, body2);  
call.enqueue(new Callback<ResponseBody>() {  
    @Override
    public void onResponse(Call<ResponseBody> call,
            Response<ResponseBody> response) {
        Log.v("Upload", "success");
    }
    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        Log.e("Upload error:", t.getMessage());
    }
});

post方法上传文件需要多加一个@Multipart注解

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值