Retrofit使用教程(一)- Retrofit入门详解(1)

  • 有时间和能力的话会尝试研究一下retrofit的 源码.

本篇博客主要讲解以下问题


  • Retrofit简介

  • Retrofit的简单使用例子

  • Retrofit的get请求

  • Retrofit的put请求(提交表单数据)

  • 如何为 retrofit添加header

  • 如何提交json数据

Retrofit简介


Retrofit是square开源的网络请求库,底层是使用OKHttp封装的,网络请求速度很快.

主要有一下几种请求方法

| 格式 | 含义 |

| — | — |

| @GET | 表示这是一个GET请求 |

| @POST | 表示这个一个POST请求 |

| @PUT | 表示这是一个PUT请求 |

| @DELETE | 表示这是一个DELETE请求 |

| @HEAD | 表示这是一个HEAD请求 |

| @OPTIONS | 表示这是一个OPTION请求 |

| @PATCH | 表示这是一个PAT请求 |

各种请求注解的意思

| 格式 | 含义 |

| — | — |

| @Headers | 添加请求头 |

| @Path | 替换路径 |

| @Query | 替代参数值,通常是结合get请求的 |

| @FormUrlEncoded | 用表单数据提交 |

| @Field | 替换参数值,是结合post请求的 |

| @Body | 可以用来提交 Json 数据或者上传文件 |

Retrofit的简单使用例子


要使用retrofit请求网络数据,大概可以分为以下几步

  • 1)添加依赖,这里以AndroidStudio为例:在build.grale添加如下依赖

compile ‘com.squareup.retrofit2:retrofit:2.1.0’

compile ‘com.squareup.retrofit2:converter-gson:2.1.0’

  • 2) 创建Retrofit对象

Retrofit retrofit = new Retrofit.Builder()

//使用自定义的mGsonConverterFactory

.addConverterFactory(GsonConverterFactory.create())

.baseUrl(“http://apis.baidu.com/txapi/”)

.build();

mApi = retrofit.create(APi.class);

  • 3)发起网络请求

mApi = retrofit.create(APi.class);

Call news = mApi.getNews(“1”, “10”);

news.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

}

@Override

public void onFailure(Call call, Throwable t) {

}

});

public interface APi {

@Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)

@GET(“word/word”)

Call getNews(@Query(“num”) String num,@Query(“page”)String page);

}

**到此一个简单的使用retrofit的网络请求就完成了。**接下来我们来了解retrofit的各种请求方式。


Retrofit的get请求


加入我们想请求这样的网址:http://apis.baidu.com/txapi/world/world?num=10&page=1,header为”apikey:81bf9da930c7f9825a3c3383f1d8d766”,我们可以这样请求:

第一步,在interface Api中 增加如下方法

@Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)

@GET(“word/word”)

Call getNews(@Query(“num”) String num,@Query(“page”)String page);

第二部,在代码里面请求

//创建retrofit对象

Retrofit retrofit = new Retrofit.Builder()

//使用自定义的mGsonConverterFactory

.addConverterFactory(GsonConverterFactory.create())

.baseUrl(“http://apis.baidu.com/txapi/”)

.build();

// 实例化我们的mApi对象

mApi = retrofit.create(APi.class);

// 调用我们的响应的方法

Call news = mApi.getNews(number, page);

news.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

News body = response.body();

Logger.i(“onResponse: =”+body.toString());

}

@Override

public void onFailure(Call call, Throwable t) {

Logger.i(“onResponse: =”+t.getMessage());

}

});

解释说明

假设BaseUrl是http://apis.baidu.com/txapi/的前提下

,@Query(“page”)String page

@Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)

@GET(“word/word”)

Call getNews(@Query(“num”) String num,@Query(“page”)String page,@Query(“type”) String type);

@Headers({“apikey:81bf9da930c7f9825a3c3383f1d8d766” ,“Content-Type:application/json”})

@GET(“{type}/{type}”)

Call tiYu(@Path(“type”) String type, @Query(“num”) String num,@Query(“page”)String page);

String type=“tiyu”;

Call news = api.tiYu(type,number, page);


retrofit的post请求


假如我们想要 请求这样的网址http://apis.baidu.com/txapi/world/world?以post的 方式提交这样的 数据:num=10&page=1,我们可以写成 如下的 样子,注意post的时候必须使用@Field这种形式的注解,而不是使用@Query这种形式的注解,其他的 与get请求一样,这样只给出核心代码

@FormUrlEncoded

@Headers({“apikey:81bf9da930c7f9825a3c3383f1d8d766” ,“Content-Type:application/json”})

@POST(“world/world”)

Call postNews(@Field(“num”) String num, @Field(“page”)String page);

如何为retrofit添加请求头head


总共有以下几种方式

第一种方法

在OKHttpClient interceptors里面进行处理,这样添加的headKey不会覆盖掉 前面的 headKey

okHttpClient.interceptors().add(new Interceptor() {

@Override

public Response intercept(Interceptor.Chain chain) throws IOException {

推荐学习资料

  • Android进阶学习全套手册

  • Android对标阿里P7学习视频

  • BAT TMD大厂Android高频面试题

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

片转存中…(img-uobqy9Ch-1714514962970)]

  • Android对标阿里P7学习视频

    [外链图片转存中…(img-iX2mEL6A-1714514962970)]

  • BAT TMD大厂Android高频面试题

[外链图片转存中…(img-A6Ne1AQh-1714514962971)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值