Retrofit2的基本用法

首先什么是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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值