rxjava2+retrofit2

简介: rxjava2+retrofit2

简述


Retrofit2square公司出品的一个网络请求库,网上有很多相关的介绍。


  • get请求
  • post请求
  • 文件上传
  • 文件下载
  • 开启日志拦截
  • 与RxJava结合使用


什么是Retrofit2


官网是这么介绍的:

Retrofit adapts a Java interface to HTTP calls by using annotations on the declared methods to 
define how requests are made。

他的大概意思是说:Retrofit 是一个 java 接口类,以注解的方式用于 HTTP 网络请求。


使用前的配置


build.gradle 的 dependencies 添加:


获取Retrofit实例


Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://plus31.366ec.net/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

需要注意的是baseUrl添加的是地址的主域名。


申明RestService接口类


public interface RestService {
    @GET("/Route.axd?method=vast.Store.manager.list")
    Call<ResponseBody> getManagerData(@Query("StoreId") int id);
}

@GET 包含的是请求地址,是主域名之后的地址。举个例子,请求的

全地址:http://plus31.366ec.net/Route.axd?method=vast.Store.manager.list

主域名为:http://plus31.366ec.net/

@GET包含的地址为:/Route.axd?method=vast.Store.manager.list


这样就完成了一个简单的@GET封装。


创建RestClient类


public class RestClient {
    private Retrofit mRetrofit;
    private static final String BASE_URL = "http://plus31.366ec.net/";
    private RestService mService;
    //构造方法
    public RestClient() {
        mRetrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        mService = mRetrofit.create(RestService.class);
    }
    public RestService getRectService() {
        if (mService != null) {
            return mService;
        }
        return null;
    }
}

这样就生成了一个简单的代理类,然后就可以进行相应请求了。


Get请求


分析返回的 json数据,包含集合,那么我们可以进一步对接口返回值进行数据的封装。


BaseResponse类

public class BaseResponse<T> {
    @SerializedName("data")
    public List<T> managerList;
    @SerializedName("code")
    public int code;
    @SerializedName("message")
    public String message;
}

注意:BaseResponse类的字段,根据自己返回json数据新增或者删除。


根据返回的json集合,那么我们肯定有个实体类了。


Manager类

public class Manager {
    public int Id;
    public String UserName;
}

Manager 类你可以替换成你自己的实体类。


Get的进一步封装

@GET("/Route.axd?method=vast.Store.manager.list")
Call<BaseResponse<Manager>> getManagerDatas(@Query("StoreId") int id);

注意:我们这里对方法的返回值进行了一个修改Call<BaseResponse<Manager>>


来看看封装后的Activity类:


Get常用技巧


HashMap组装参数

@GET("/Route.axd?method=vast.Store.manager.list")
    Call<BaseResponse<Manager>> getManagerDatas(@QueryMap HashMap<String, String> hm);

Get 请求就讲到这里了,下面一起来看看 Post请求。


Post请求


@FormUrlEncoded
    @POST("/Route.axd?method=vast.Store.manager.list")
    Call<BaseResponse<Manager>> postManagerDatas(@Field("StoreId") int id);

@Field("StoreId") int id可以替换@Body@Body你可以传入HashMap、实体 beans 等对象。


注意:以@Body上传参数,会默认加上Content-Type: application/json; charset=UTF-8的请求头,即以JSON格式请求,再以JSON格式响应。


单个文件上传


@Multipart
    @POST("/UploadProduct.axd")
    Call<ResponseBody> uploadSimpleFile(@Part MultipartBody.Part file);


目录
相关文章
|
7月前
retrofit+okhttp+rxjava
retrofit+okhttp+rxjava
|
设计模式 API
定制Retrofit
定制Retrofit
138 0
定制Retrofit
|
JSON Java 数据格式
rxjava2+retrofit2 简介
rxjava2+retrofit2 简介
123 0
|
JSON Android开发 数据格式
RxJava+Retrofit示例 ,Retrofit 注解学习
RxJava+Retrofit示例 ,Retrofit 注解学习
187 0
|
JSON Android开发 数据格式
使用Retrofit + RxJava 网络请求
使用Retrofit + RxJava 网络请求
408 0
使用Retrofit + RxJava 网络请求
|
Android开发 Java JSON
RxJava2 和 Retrofit2 结合使用详解
不讲 rxjava 和 retrofit 而是直接上手 2 了,因为 2 封装的更好用的更多。 1. 观察者模式 常见的 button 点击事件为例,button 是被观察者,listener 是观察者,setOnClickListener 过程是订阅,有了订阅关系后在 button 被点击的时候,监听者 listener 就可以响应事件。
|
缓存 JSON API
一款基于RxJava2+Retrofit2实现简单易用的网络请求框架
本库是一款基于RxJava2+Retrofit2实现简单易用的网络请求框架,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置,上传下载进度显示,请求错误自动重试,请求携带token、时间戳、签名sign动态配置,自动登录成功后请求重发功能,3种层次的参数设置默认全局局部,默认标准ApiResult同时可以支持自定义的数据结构,已经能满足现在的大部分网络请求。
2642 0
RxJava+Retrofit代码混淆
-dontwarn javax.annotation.** -dontwarn javax.inject.** # OkHttp3 -dontwarn okhttp3.
2199 0
|
缓存 API Android开发
浅谈OkHttp以及Retrofit+RxJava的封装使用
1.为什么我们要使用OkHttp?OkHttp有什么优点?  说OkHttp之前我们先说另外两个网络请求库——HttpUrlConnection和HttpClient。
2232 0
|
Android开发 Java