Retrofit初探

Retrofit的使用详解(一) Retrofit是一种网络请求框架,出自Square公司android 大牛Jakewharton的大手笔,其底层封装了OkHttp的框架,将网络请求的任务全权交给了OkHttp,而 我们只需 通过简单的配置,就能很好的运行Retrofit了。 阅读详情

Retrofit初探

0x00 Retrofit

很久以前就计划要研究一下,但是一直拖到现在,不知道是因为优先级放的比较低还是因为拖延症。总只,现在要完整的看一遍。

由于这个已经出来很久了,所以我就直接选择了Refrofit2,没有去关注Refrofit1,等看完Refrofit2有时间的话再去看看Refrofit1,看看它们的变迁。好了,先从Refrofit2开始吧。

0x01 简介

简介

如果你接触Android时间比较长,从最初的自己封装线程,到使用异步任务,到开源的各种第三方网络请求框架如xUtils,到谷歌的Volley,androider总在探索一种更好的网络请求形式。Retrofit就是这样的一款产品。

PS:从上面一句话,我们也可以看到,android生态在不断的进步和完善~~

引入

两个问题,gradle和混淆:

  • Gradle:

    • Retrofit: compile 'com.squareup.retrofit2:retrofit:2.1.0'
    • JSON解析器: compile 'com.squareup.retrofit2:converter-gson:2.1.0'
  • Proguard:

    -dontwarn retrofit2.**
    -keep class retrofit2.** { *; }
    -keepattributes Signature
    -keepattributes Exceptions

0x02 从一个demo开始

public class ExampleUnitTest {
    @Test
    public void test_retrofit() throws Exception{
        String url = "http://api.github.com/";
        OkHttpClient client = new OkHttpClient.Builder()
                .build();
        Retrofit.Builder builder = new Retrofit.Builder()
                .client(client)
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create());
        Retrofit retrofit = builder.build();
        GitHubService github = retrofit.create(GitHubService.class);
        Call<User> ttdevs = github.userInfo("ttdevs");

        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ttdevs.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                User ttdevs = response.body();

                String message = String.format(
                        "I'm %s.\n%s", 
                        ttdevs.getName(), 
                        ttdevs.getHtml_url());
                System.out.println(message);

                countDownLatch.countDown();
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                countDownLatch.countDown();
            }
        });
        countDownLatch.await();
    }
}

0x03 第一个问题:Header

执行上面的小demo,我们通过抓包发现它的header信息如下:

Host: api.github.com:443
Proxy-Connection: Keep-Alive
User-Agent: okhttp/3.3.0

这个header信息是不是很简单,如果你用这样的请求去写爬虫的话,多数情况下是得不到结果的。而实际情况也是:我们需要在header中使用标准http头信息,也可能需要加入自定义的头信息,比如token等。Retrofit2没有直接给他们提供这样的方法,但是我们知道,Retrofit2用的是Okhttp3,因此,我们可以从Okhttp3中下手,代码如下:

  • 创建 HeadersInterceptor 类,代码如下:

    public class HeadersInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
    
        Request request = original.newBuilder()
                .header("User-Agent", "ttdevs")
                .header("Content-Type", "application/json; charset=utf-8")
                .header("Accept", "application/json")
                .header("token", "abcdefg_ttdevs_hijklmn")
                .header("user_key", "ttdevs")
                .method(original.method(), original.body())
                .build();
    
    
        long t1 = System.nanoTime();
        String requestHeader = String.format(">>>>>Sending request %s on %s%n%s",
                request.url(), chain.connection(), request.headers())
        System.out.println(requestHeader);
    
        Response response = chain.proceed(request);
    
        long t2 = System.nanoTime();
        System.out.println(String.format(">>>>>Received response for %s in %.1fms%n%s",
                response.request().url(), (t2 - t1) / 1e6d, response.headers()));
    
        System.out.println("=====================================================");
        return response;
    }
    }
  • 在 Okhttp 中加入 HeadersInterceptor

    String url = "http://api.github.com/";
    OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new HeadersInterceptor())
        .build();
    Retrofit.Builder builder = new Retrofit.Builder()
        .client(client)
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create());
    Retrofit retrofit = builder.build();
    GitHubService github = retrofit.create(GitHubService.class);
    Call<User> ttdevs = github.userInfo("ttdevs");

这样在运行上面的代码,我们就可以在 Http 请求的 Header 中看到我们加入的信息了。

源码参考:ttdevs

参考:

  1. https://github.com/square/retrofit
  2. http://square.github.io/retrofit/
  3. https://futurestud.io/blog/retrofit-add-custom-request-header
尚硅谷Android企业级技术之_Refrofit基本使用 这是reprofit和rxjava入门教程,里面有非常详细的知识点讲解 立即下载

相关推荐

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程,涵盖运动学建模、仿真环境搭建、PID控制器设计与实现等关键环节。通过Simulink仿真和可视化调试技巧,帮助开发者掌握移动机器人运动控制的核心技术,提升轨迹跟踪精度与性能优化能力。

weixin_28717683的博客 244

refrofit的框架

BaseApis public interface BaseApis { //被观察者 @GET Observable&lt;ResponseBody&gt; get(@Url String url); @POST Observable&lt;ResponseBody&gt; post(@Url String url, @QueryMap Map&lt;Strin...

yjjhtl的博客 629

全志T113s3主线linux开发(0)--基础准备

嵌入式Linux设备的启动大概是三步:1)启动芯片+内存:常见的是Uboot,不过全志的Uboot主线对SPI NAND 不太友好,用TF卡就方便。对于T113S芯片,推荐使用Awboot,简陋但快速。开发阶段用这个就方便好多,对SPINAND支持也方便。2)启动linux内核:主线内核以下通篇都用6.13以上的内核。对比tina5.0还在用5.4 ,主要是性能、安全上有变化。6.0以上内核在devicetree的编写具体格式上有了变化,网上大量tina5.0和5.4内核的编写方式不适用。

2301_79234138的博客 2248

Retrofit2使用介绍

前言对于还不知道Refrofit是什么的同学,我只能说你们太out了,赶紧去Google下,本文是针对Retrofit2.0的使用介绍,当然大家也可以直接去官网上去看使用介绍添加依赖要使用Retrofit首先得添加gradle依赖compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:conver

老胡 3518

Jetson AGX Orin 新手避坑:解决‘找不到nvidia-jetpack包’的完整修复指南

本文详细介绍了Jetson AGX Orin设备在安装JetPack开发套件时遇到的'nvidia-jetpack包缺失'问题的完整解决方案。通过分析问题根源、提供分步修复指南以及系统优化建议,帮助开发者快速解决这一常见问题,充分发挥Jetson AGX Orin的边缘计算性能。

weixin_42520909的博客 462

SwissADME:一款在线预测小分子药动学性质的工具

是一个免费的在线工具,由瑞士生物信息学研究所(SIB)开发,用于预测和分析小分子的药物相似性、理化性质、药代动力学特性以及合成可行性等。它是药物设计和开发中常用的工具之一,帮助研究人员快速评估化合物的成药潜力。

药研猿的博客 5023

Carson带你学Android:这是一份详细的 Retrofit使用教程(含实例讲解)

前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会喜欢。 如果对Retrofit v2.0的源码感兴趣,可看文章:Android:手把手带你深入剖析 Retrofit 2.0 源码 目录![目录](http://upload-

Carson带你学Android 25万+

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

m0_58523831的博客 1万+

retrofit初探

retrofit初探引用maven:<dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>retrofit</artifactId> <version>2.1.0</version> </dependency> gradle:compile 'com.squareup.retrofit2:retrofit:2

SimpleCoder's Blog 453

准备生日礼物

摘要: 题目要求统计某月份需要准备的员工生日礼物数量。输入包括目标月份、员工姓名列表和对应的生日列表(格式为Year/Month/Day)。需处理重复员工(以最后一次录入为准),统计该月生日的员工人数。示例1中5月有3名员工生日,输出3;示例2中10月有6名,输出6。解题关键在于使用哈希表去重(以员工姓名为键),拆分生日字符串提取月份进行匹配。代码实现(C++/Java/Python)均遵循以下步骤:读取输入、哈希去重、解析月份并统计目标月份人数。时间复杂度为O(n),空间复杂度O(n)。

面试高手的博客 300

(王道408考研数据结构)第一章绪论-第二节1:算法的基本概念、算法的特性及设计要求

算法(Algorithm):是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作王道视频课中讲到了一个例子,展示了算法就是解决问题的特定步骤的描述对于给定的问题可以有多种多样的算法来解决,只不过这些算法有各自的优点和缺点。

快乐江湖的博客 2686

Retrofit2 初探

一、前言 之前看了okhttp的源码,然后我们的项目中一般都是okhttp + retrofit组合的形式,所以也想看一下retrofit的源码,看看它是如何通过注解与okhttp组合进行网络请求的。本文只是记录一下自己的学习过程,理解一下retrofit的执行流程,将整个网络请求过程打通。 二、源码流程讲解 说明:代码讲解主要围绕使用的流程来讲解 2.1、retrofit的调用方式 Retr...

u014452970的博客 1309

PrimeTime low power-多电压设计流程(2)

get_power_switches`、`get_supply_nets` 和 `get_supply_ports` 命令的操作方式类似,并具有类似的命令选项。PrimeTime 根据 UPF 命令构建电源供应网络,包括 create_power_domain、create_supply_net、create_supply_set、create_supply_port、set_domain_supply_net 和 connect_supply_net。电源集句柄是为电源域隐式创建的一个抽象电源集。

QRBQ 713

retrofit初探及使用

retrofit 底层由okhttp实现,相当于一个适配器。 使用的时候很简洁,解耦性很高。 retrofit中大量使用注解,所以用起来很方便。 使用retrofit要先知道 网络请求返回的是json/xml或其他格式的数据,所以需要自定义一个 接收服务器返回数据格式所对应的类 创建一个接口,用来描述网络请求,如用GET或是POST请求方式,要访问的url,设置请求头或参数等,接口中的方法必须要...

qq_36908032的博客 305

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Retrofit2源码初探

Retrofit是Square面向安卓平台提供的http客户端开源网络库,本文就Retrofit2源码进行探讨,粗略分析其运行原理。

白子的博客 823

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Rxjava、retrofit初探

刚开始学习,先记录一些东西,以后再做整理建议查看深入浅出RxJavaAwesome-RxJava lzyzsd收集的关于Rxjava的知识给 Android 开发者的 RxJava 详解———————–所以下面就不用看了,只是搜集一些我觉得挺重要的,要条理的话看上面的package com.example.kevin.rxjava;import android.support.v7.app.App

haowei0708的博客 541

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

初探retrofit网络请求框架

初探retrofit网络请求框架 retrofit简介 retrofit是由square公司的大神开发的一个网络请求适配器框架,这个框架简化了对okhttp的使用,它将一个基本的Java接口通过动态代理的方式翻译成一个HTTP请求,并通过OkHttp去发送请求。此外它还具有强大的可扩展性,支持各种格式转换以及RxJava。本文是基于Retrofit 2.9.0 版本去分析的。 retrofit的简单使用 这里我们只是展示一下retrofit的简单使用,主要函数为我们分析源码提供入口 //创建接口服务 int

guojingbu的博客 283

Retrofit初探和简单使用

https://www.jianshu.com/p/c94b557e2c59添加链接描述

weixin_43918342的博客 236

Retrofit初探——请求参数

0x00 请求参数常见的Http请求,除了指定的请求地址,很多时候我们还需要加上一些请求参数,这些参数可能是固定的,也可能是动态添加的。在Retrofit中,我们该如何处理呢?这里以GET方式中添加请求参数为例。

ttdevs 3947

Retrofit初探——Header问题补充

0x00 Retrofit Header上一篇中我们介绍Retrofit的一个简单的Demo和添加Header方法,这一篇在补充一下Header的另外几种处理方法。0x01 Header使用OkHTTP的Interceptor来处理Header信息,这种方法是需要我们在封装Retrofit的时候考虑的。但是有时候我们还希望能灵活的控制每一个请求的Header信息,接下来的几种方法满足我们这样的要求。

ttdevs 4161

RxJava & Retrofit 初探

RxJava & Retrofit 初探年后一直想学习新的技术,但是公司项目一直很紧,没有太多时间去学习,只能晚上回去后看一点,零零碎碎的学习总是容易忘记,还是博客记录一下比较好。2017加油!! RxJava是什么 一个实现异步操作的库。 RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。 一个响应式编程框架。 无论逻辑多复杂,都能保持代码的简洁度。 观察者模式举个栗子,拿订报纸来说,

dyd771062122的博客 405

初探Retrofit使用方法

概念Retrofit框架是Square公司出品的网络框架,效率快、实现简单。运用注解和动态代理,极大简化网络请求繁琐步骤特点    性能好、处理快,使用简单;默认使用okhttp处理网络请求;默认使用Gson解析。常用注解接口    Retrifit采用注解方式标注方法,常用接口如下:@GET:GET网络请求方式@POST:POST网络请求方式GET请求相关:@Headers:头参数信息@Path...

u012545728的博客 319

Retrofit2.0初探

随着Google对HttpClient 摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖。 Retrofit是由Square公司出品的针对于Android和Java的类型安全的Http客户端,Retrofit其实质上就是对okHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层, 其将请求返回jav

阳光下的影子的博客 483

初探Okhttp3+Retrofit2+RXJava

初探Okhttp3+Retrofit2+RXJava            本人菜鸟一枚,涉及Android开发也只有区区两年的时间,联网操作从最初接触的httpClient到Xutils,因为后来Android6.0发布。使得联网操作有了很大的变化。Android 6.0发布之后,谷歌已经将所有旧版的HttpURLConnection,HttpClient,和一些和apache有关包的类和方法

逆雪残阳的博客 2251
上一篇: 微信公众号开发流程
下一篇: Retrofit初探——Header问题补充
ttdevs
博客等级 码龄15年 388粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值