RxJava + Retrofit 总结汇总

xiaoxiao2021-02-28  90

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 请求参数设置是不一样的;

踩过的坑

Retrofit踩坑之Delete请求

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

转载请注明原文地址: https://www.6miu.com/read-77457.html

最新回复(0)