Retrofit官网(出自Square公司)
Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton。
@FormUrlEncoded ---> 这个是和@Field一起使用的; @POST("good/recommendgood") Observable<String> makeMoneyGoodsRecommend(@Header("token") String token, @Field("size") String size);
查询参数也可以添加。@Query是在get请求url出现?时出现查询的;
@GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
Retrofit的底层也是由 OkHttp 网络加载库来支持的。 关于 Retrofit 的原理,有三个十分重要的概念:『注解』,『动态代理』,『反射』。将会在以后逐步进行分析。
Java 注解 基础知识点 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 作用分类: ①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】 ②代码分析:通过代码里标识的元数据对代码进行分析【使用反射】 ③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
{user} 类似于占位符的作用,具体类型由 repo(@Path("user") String user) 指定,这里表示 {user} 将是一段字符串。
Retrofit 中,有许多的注解:
其中,包含了与请求方法相关的 @GET、@POST、@HEAD、@PUT、@DELETA、@PATCH,和参数相关的@Path、@Field、@Multipart等。
Header 设置
第一种是静态配置,直接在接口中指定 Header 参数:
第二种是动态配置: @GET("/user") Call<TestModel> getUser(@Header("Authorization") String authorization)
GET 请求参数设置和POST 请求参数设置是不一样的;
http://blog.csdn.net/u014752325/article/details/59589437
@DELETE("bean/delete") Observable<CommonBean> deleteBean(@Body DeleteUserBody body);
那就根据这个改一下呗
@HTTP(method = "DELETE", path = "location/delete", hasBody = true)
正解:
// 删除收货地址 —————— 迷之错误、 addressid 与 id 有什么分别吗? @DELETE("address/delete/{addressid}") Observable<String> deleteAddressData(@Header("token") String token, @Path("addressid") String addred);
// 异常状态信息的处理、
public void onError(Throwable e) { LogUtils.e("mxg", "requestVerificationCodeForLogin ==onError== " + e.getMessage()); // TODO 异常的处理、 if (e instanceof HttpException) { HttpException httpException = (HttpException) e; try { String responseString = httpException.response().errorBody().string(); JSONObject jsonObject = new JSONObject(responseString); String msg = jsonObject.getString("msg"); LogUtils.e("mxg", "responseString = " + responseString + ",msg = " + msg); ToastUtil.showToast(context, msg); } catch (Exception e1) { e1.printStackTrace(); } } }
