Retrofit

哈喽大家好,今天给大家介绍一款非常牛逼的对网络请求框架封装的一个框架,
它的名字呢就是我们的标题retrofit,出品子square,哇大佬级别的出品,在早期做
开发的时候retrofit、okhttp、picasso我们最常用的组合,因为他们都是square公司
出品的,想想都激动,合计绝技哟,咳咳回归正题retrofit

1.retrofit是使用注解和动态代理的形式封装而成的,用于网络请求的框架.
2.使用动态代理模式哟,很强,底层是okHttp的封装,这样就使我们的网络请求非常的灵活。

工作原理
在这里插入图片描述

下面就是重要的环节代码:

第一步导入依赖,支持gson解析

implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

第二步,创建Bean

第三步创建接口

retrofit里面的注解,我就和请求的方法一起介绍了,显得简单

get请求

首先我们需要一个接口里面写注解,和请求的方法

这个里面@GET()方法体中的方法是对我们字符串的拼接,一般都是把公司的域名给提出去,这里就把我们的网址变得非常灵活
Call 请求方法的类型
getInstance(@Query(“key”) String key,@Query(“num”) String page);获取参数的方法
这里面就用到了一个@Query注解,这个注解主要就是对我们网址后面的参数进行拼接如:?num=10&page=1;

@GET("nba/")
    Call<NetWorkBean> getInstance(@Query("key") String key,@Query("num") String page);

第四步:网络请求开始

//创建retrofit.Builder对象
        Retrofit retrofit = new Retrofit.Builder()
                //支持gson解析
                .addConverterFactory(GsonConverterFactory.create())
                //拼接请求头Constants.BASE_URL = “http://api.tianapi.com/”
                .baseUrl(Constants.BASE_URL)
                .build();
//实例化接口实例
        MyServiceInterface myServiceInterface = retrofit.create(MyServiceInterface.class);
        //调用接口中的方法,并传入参数
        Call<NetWorkBean> instance = myServiceInterface.getInstance("71e58b5b2f930eaf1f937407acde08fe","10");
        //支持异步
        instance.enqueue(new Callback<NetWorkBean>() {
            @Override//成功
            public void onResponse(Call<NetWorkBean> call, Response<NetWorkBean> response) {
                //判断是否请求成功
                if(response != null && response.isSuccessful()){
                    //获取集合
                    List<NetWorkBean.NewslistBean> newslist = response.body().getNewslist();
                    //设置数据
                    mAdapter.setData(newslist);
                }else{
                    //请求失败失败
                }
            }
            @Override//请求错误
            public void onFailure(Call<NetWorkBean> call, Throwable t) {

            }
        });

如果参数多的话我们就可以吧@Query换成@QueryMap了,作用就是把参数编程一个集合中存入

@GET("cook/query")
    Call<ResponBean> getResponBean(@QueryMap Map<String,String> map);

请求网络的代码

//创建map集合
        Map<String, String> map = new HashMap<>();
        map.put("key","91c73d6bce9656b27ad1e6db09b2ecad");
        map.put("menu","西红柿");
        map.put("rn","10");
        map.put("pn",page+"");

        //创建Retrofit.Builder对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.BASE_URL_TEXT)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        //创建接口实例对象
        MyServiceInterface myServiceInterface = retrofit.create(MyServiceInterface.class);
        //获取方法
        Call<ResponBean> responBean = myServiceInterface.getResponBean(map);
        //异步请求
        responBean.enqueue(new Callback<ResponBean>() {
            @Override
            public void onResponse(Call<ResponBean> call, Response<ResponBean> response) {
                //判断是否请求成功
                if(response != null && response.isSuccessful()){
                    //获取集合
                    List<ResponBean.ResultBean.DataBean> data = response.body().getResult().getData();
                    //设置数据
                    if(page == 0){
                        mAdapter.setData(data);
                    }else{
                        mAdapter.addData(data);
                    }
                    loadConpleted();

                }else{
                    //请求失败失败
                }
            }

            @Override
            public void onFailure(Call<ResponBean> call, Throwable t) {

            }
        });

下面介绍一个Post请求
@FormUrlEncoded 主要的功能就是防止乱码,也是我们post要加的一个参数
@FieldMap相当于上面说的@QueryMap,区别就在于前者用在post请求,后者用get请求
当然有@FieldMap就有@Field用法和@Query相同

//get请求
    @FormUrlEncoded
    @POST("cook/query")
    Call<ResponBean> getPostRespon(@FieldMap Map<String,String> map);

代码

//创建map集合
        Map<String, String> map = new HashMap<>();
        map.put("key","91c73d6bce9656b27ad1e6db09b2ecad");
        map.put("menu","西红柿");
        map.put("rn","10");
        map.put("pn",page+"");
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(Constants.BASE_URL_TEXT)
                .build();
        MyServiceInterface myServiceInterface = retrofit.create(MyServiceInterface.class);
        Call<ResponBean> postRespon = myServiceInterface.getPostRespon(map);
        postRespon.enqueue(new Callback<ResponBean>() {
            @Override
            public void onResponse(Call<ResponBean> call, Response<ResponBean> response) {
                //判断是否请求成功
                if(response != null && response.isSuccessful()){
                    //获取集合
                    List<ResponBean.ResultBean.DataBean> data = response.body().getResult().getData();
                    //设置数据
                    if(page == 0){
                        mAdapter.setData(data);
                    }else{
                        mAdapter.addData(data);
                    }
                    loadConpleted();

                }else{
                    //请求失败失败
                }
            }

            @Override
            public void onFailure(Call<ResponBean> call, Throwable t) {

            }
        });

这里说明一下,这要先写这些常用的网络请求方法,没必要先了解结构和参数,我们会用了之后,他的其他参数都会水到聚成的,所以不要着急,慢慢来,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值