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

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的认知还很肤浅。需要在实践中加深认知。也希望大神指教。

相关学习资料的网址

  1. retrofit官网: http://square.github.io/retrofit/
  2. github地址: https://github.com/square/retrofit
  3. Simple HTTP with Retrofit2:
    https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值