0
点赞
收藏
分享

微信扫一扫

rxjava2+retrofit2


 简述

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

  • ​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);



举报

相关推荐

0 条评论