Retrofit学习二:基础用法

其实retrofit支持GET, POST, PUT, DELETE, and HEAD这五种请求方式,上一篇(http://blog.csdn.net/u013795543/article/details/57084232)简单地展示了一般的get请求以及@PATH设置url参数。

1、@Query设置URL参数

利用@PATH可以通过占位符的方式实现路径参数的填补,那么@Query则可以实现路径的键值对参数,比如下面:
baseurl/users?name=username
上面的路径可以通过@GET(“users?name=username”)实现,当然啦,为了重用性,最好还是下面这样:

@GET("users")
    Call<List<User>> getUsersByName(@Query("name") String username);

然后在调用接口时把这个usename传进去就行了
如果有多个键值对的,那么可以使用集合了:

@GET("users")
Call<List<User>> groupList(@QueryMap Map<String, String> options);

也可以来个组合的,比如这样:
baseurl/group/id/users?sort=sortId

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

2、post特例

上面主要介绍了get请求,其实也都适用于post请求,值得一提的,post还有一些特殊的用法,比如上传表单、文件等。
(1)@Body设置请求体
@Body后面跟的可以是String也可以是一个实体类,如果传入的是实体类,还是需要addConverterFactory方法(这个方法既可以将request进行转化,也可以对返回的response进行转化)将实体类转化为String进行请求,最后的请求形式还是表单形式。比如:
baseurl/users?name=”axiba”&gender=“male”&age=12

@POST("users/new")
Call<User> createUser(@Body User user);

上面的name=”axiba”&gender=“male”&age=12是从User实体类解析出来的。
(2)@Part、@Field设置表单

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

(3)混合型@Multipart

@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

3、遇到的坑

(1)onFailure(),,Failed to invoke public com.squareup.okhttp.ResponseBody() with no args,错误代码如下

call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                t.printStackTrace();
                Log.i(TAG, "onFailure(),," + t.getMessage());
            }
        });

这个是由于在callback处理时泛型参数写错了,由于Retrofit是restful的,这就需要callback的类型必须和请求实际返回的数据一致,所以这里的ResponseBody要改为对应的javaBean。

参考文章:Retrofit项目官方文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值