您的位置:首页 > 理论基础 > 计算机网络

Retrofit 2.0关于get和post的网络访问的简单使用

2016-10-14 09:23 337 查看
Retrofit 2.0已经发布很久了,由于个人原因,现在才稍有接触。其他地方关于这个框架的中文介绍都只是之言片语。使得学习起来比较麻烦一些。一般来说这种比较强大的框架,学习起来都有一些难度,有时候也只运用它的一个功能模块。最近由于工作需要我学习使用了这个框架来进行网络的get和post请求来对数据进行操作。由于只是初次使用,了解还不深入,只能稍微介绍一下。

retrofit底层默认使用的就是okhttp。

优点:

可以配置不同HTTPclient来实现网络请求,如okhttp、httpclient等

请求的方法参数注解都可以定制

支持同步、异步和RxJava

超级解耦

可以配置不同的反序列化工具来解析数据,如json、xml等

使用非常方便灵活

框架使用了很多设计模式(感兴趣的可以看看源码学习学习)

缺点:

不能接触序列化实体和响应数据

执行的机制太严格

使用转换器比较低效

只能支持简单自定义参数类型

我所要解析的数据是json格式,说实话,使用这个框架真心非常的爽。个人认为不接触序列化实体是它最明显的缺点。
下面按照步骤介绍一下使用步骤:

1. 在androidstudio的gradle中导入依赖

compile 'com.squareup.retrofit:retrofit-mock:2.0.0-beta2'
compile 'com.squareup.okhttp:okhttp:2.7.5'
compile 'com.squareup.okio:okio:1.11.0'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

2.然后写一个类来进行get和post的注解:

public class Appstore {
//例如URl为:
// http://host/mobile/oauth/requireorder/publisher/2333/order?status=-1&start" +
//   "=0&size=1000000000&c=E12C8F80739"

//    1.定义一个接口
public interface IPService {
//    1.1.get请求:通过@GET注解,指明访问的地址
@GET()//★这里最前面不能带“/”
//    1.2.定义一个请求网络,并且返回结果的方法(方法返回Call<Mydata> ),
//     通过@Url来指定url

//这里的IP是一个数据类,
Call<Mydata> getIP(@Url() String ip);
/*********************************************************************************/
//    1.3.post请求:通过@FormUrlEncoded、和@POST注解,指明访问的地址
//        (★注意:千万别忘了@FormUrlEncoded)
@FormUrlEncoded
@POST()
//
Call<Mydata> postIP(@Url() String ip);
}

//    2.实例化retrofit,配置好请求地址和解析方式
static Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://host/")//★这里最后面必须能带“/”
.addConverterFactory(GsonConverterFactory.create())//设置将json解析为javabean所用的方式
.build();
//    //    3.通过retrofit创建第一步定义的接口的实例,
////      供在外部直接通过该实例调用该接口的getIPad方法,完成网络请求
static Appstore.IPService iPService =
retrofit.create(Appstore.IPService.class);
}

3.进行这个封装之后就可以调用了。调用如下:



String  ur=" mobile/oauth/requireorder/publisher/123456/order?status=-1&start=0&size=1000000000&c=E12C8F8073988A12499D28";
final Call<Mydata> call = Appstore.iPService.getIP(ur);
call.enqueue(new Callback<Mydata>() {
@Override
public void onResponse(Response<IP> response, Retrofit retrofit) {
Mydata  body=response.body();//取出解析的数据

call.cancel();//必须关闭
}

@Override
public void onFailure(Throwable t) {

}
});

注:数据的封装类。使用GsonFormat来进行数据封装。(删除了大部分数据)

public class Mydata {

public static class DataBean {
private int totalItemNum;
private List<ItemsBean> items;

public static class ItemsBean{

private RequireOrderEntityBean requireOrderEntity;

private RequireEntityDisplayVOBean requireEntityDisplayVO;

private ResumeDisplayVOBean resumeDisplayVO;

public Object getUpdatetime() {
return updatetime;
}

public void setStatusName(String statusName) {
this.statusName = statusName;
}
}
}
对于Retrofit 2.0的认知还很肤浅。需要在实践中加深认知。也希望大神指教。

相关学习资料的网址

retrofit官网: http://square.github.io/retrofit/
github地址: https://github.com/square/retrofit
Simple HTTP with Retrofit2:
https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息