Retrofit2的基本用法

来源:互联网 发布:h5 js 实现滑动效果 编辑:程序博客网 时间:2024/05/04 07:33
首先什么是Retrofit?

Retrofit是针对于Android/Java的、基于okHttp的、一种轻量级且安全的、并使用注解方式的网络请求框架。


Retrofit它有哪些好处和优势呢

Retrofit使用注解方式简化了我们的URL拼写形式,而且注解含义一目了然,使用起来也非常简单,支持同步和异步执行,使得请求变得异常简单,只要调用enqueue/execute即可.


这里先说一下Retrofit中的注解,其中HTTP注解有五个,用来修饰请求方法:

@GET   @POST   @PUT   @DELETE   @HEAD

这五个注解正好涵盖了数据的增删改查方法,每一个请求方法都必须要由这五个注解中的一个修饰。


这里我们就主要说一说最常用的@GET   @POST的用法

假设我们请URL为:http://ip.taobao.com/service/getIpInfo.php?ip=202.202.32.202

使用方法呢我们首先要定义一个接口

public interface MyService1 {    //?参数为?前面的到 /(斜杠)之间的值    @GET("getIpInfo.php")    //Get中的注解用@Query    Call<IP> getIP(@Query("ip") String ip);    /*********************************************************************************/    @FormUrlEncoded    @POST("getIpInfo.php")    //Post中的注解一定要用@Field不能用@Query    Call<IP> postIP(@Field("ip") String ip);}
上面代码中分别定义了GET和POST两种请求类型,可以看出定义的方法基本是相同的。但是,我们会发现括号中的注解不相同。那么括号中的注解是干什么的呢,简单点说其实就是前面的注解和后面的参数其实就相当于Key和Value,结合上面的URL地址可以看出,注解中的内容为ip这正是我们地址上参数的Key。而后面的String ip就是我们要填写的Value.

还有就是括号中的两种注解是分别用在两种不同的请求上的,@GET对应的是@Query,@POST对应的是@Fiele。千万不能用混了!千万不能用混了!千万不能用混了!说三遍。


那么我们的接口定义完了,现在要开始实例化retrofit,配置好请求地址和解析方式

        //实例化retrofit,配置好请求地址和解析方式        Retrofit retrofit = new Retrofit.Builder()                //★Retrofit2 的baseUlr 必须以 /(斜线) 结束,不然会抛出一个IllegalArgumentException                .baseUrl("http://ip.taobao.com/service/")                .addConverterFactory(GsonConverterFactory.create())//设置将json解析为javabean所用的方式                .build();        //通过retrofit创建第一步定义的接口的实例,        //供在外部直接通过该实例调用该接口的getIPad方法,完成网络请求        MyService1 mservice =  retrofit.create(MyService1.class);        //调用getIP(或者postIP)方法得到Call//          final Call<IP> call = taobaoIPService.getIP("202.202.32.202");            final Call<IP> call = mservice.postIP("202.202.32.202");
上面的注释写的很详细了,这里就不多说了,这里有一个概念就是最后的到的call是什么。

Call是Retrofit中重要的一个概念,代表被封装成单个请求/响应的交互行为,我的理解就是通过它的方法把你的接口转换成了Http请求。然后我们可以调用它的execute和enqueue方法分别发送同步异步请求

下面是开始异步请求

//          call.enqueue开启异步网络请求            call.enqueue(new Callback<IP>() {            @Override            //请求成功            public void onResponse(Response<IP> response, Retrofit retrofit) {                IP body = response.body();                String result = body.getData().getRegion();                Log.e("TAG",result);//                3.可以直接更改UI,因为onResponse方法已经在UI线程中                tv.setText(result);//                4.取消请求                call.cancel();            }            @Override            //请求失败            public void onFailure(Throwable throwable) {                Log.e("TAG",throwable.toString());                tv.setText(throwable.toString());                throwable.printStackTrace();            }        });
这里面就很好理解了,调用enqueue方法开启异步网络请求,里面要的参数是Callback<T>类型,那我们就实例化一个Callback<T> ,然后从写里面的两个方法,这里可以看出来可以直接修改UI说明是在主线程中执行的方法。


这就是Retrofit2的基本用法。







1 0