Retrofit 入门基础

本文讲的是Retrofit 入门基础,


这是Retrofit系列文章中的第一篇,这个系列前前后后有几个用例,并且还分析了Retrofit的功能性和可扩展性。

— 2015.10.21日更新

除了之前已经有的关于Retrofit 1.9的代码样例,我们也已经添加了新的关于Retrofit 2(基于 2.0.0-beta2)的代码样例。 并且也已经发布了一个扩展的Retrofit更新指南:在下述内容的 。

文章概述

通过这篇博客,我们会学到Retrofit的基本用法和实现一个针对API或者HTTP请求的Android客户端。

然而,这篇博客不会讲太多入门的知识,也不会讲Retrofit是关于什么的,如果你想要了解这些,可以看Retrofit项目主页.

Retrofit是什么

官方的Retrofit主页是这样描述它的

用于Android和Java的一个类型安全(type-safe)的REST客户端

你将会用注解去描述HTTP请求,同时Retrofit默认集成URL参数替换和查询参数.除此之外它还支持 Multipart请求和文件上传。

如何去声明请求(API)

请去Retrofit 主页 浏览并阅读相应的API声明章节来理解如何发送一个请求。你可以在上面找到所有重要的信息,和非常清楚的代码样例。

准备你的Android项目

现在,让我们把手放回到键盘上来。如果你已经建了一个Android项目的话,你可以直接看下一条,否则,在你最熟悉的IDE上建立一个Android项目。我们更倾向于用Gradle构建项目,但是如果你用Maven也是可以的。

定义依赖关系:Gradle 或者 Maven

现在,在你的项目中设置 Retrofit依赖。 根据你自己的构建工具,在pom.xml或者build.gradle中定义Retrofit和它的依赖关系。当运行命令去构建你的项目时,构建系统会在你的项目里下载相应的库。 我们建议用OkHttpP搭配Retrofit,OKHttp同样需要定义Okio依赖。

Retrofit 1.9

pom.xml

    com.squareup.retrofit
    retrofit
    1.9.0

    com.squareup.okhttp
    okhttp
    2.2.0

build.gradle

dependencies {
    // Retrofit & OkHttp
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
}

Retrofit 2

如果你正在用Retrofit2.0版,请用下面的依赖

pom.xml

    com.squareup.retrofit
    retrofit
    2.2.0-beta2

build.gradle

dependencies {
    // Retrofit & OkHttp
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
}

Retrofit 2默认使用OKHttp作为网络层,并且在它上面进行构建。 你不需要在你的项目中显式的定义OkHttp依赖,除非你有一个特殊的版本需求。

现在你的项目已经集成了Retrofit,让我们一起创建一个具有持久性的 Android API/HTTP客户端吧。

##可持续的Android客户端 在对已经有的Retrofit的客户端的研究期间,我们发现了example repository of Bart Kiers。实际上,它是一个用Retrofit进行OAuth认证的例子。然而,它提供了做一个可持续的Android客户端需要的全部基本原理。这就是我们在未来的博客文章中要把它作为一个基础进行扩展,将认证功能更进一步的原因。

接下来的这个类是我们的Android客户端的主要成分:ServiceGenerator。

Service Generator

ServiceGenerator 是我们 API/HTTP客户端的核心, 在目前的阶段,它只定义了一个对给定的类或者接口创建一个基本的REST适配器(adapter)的方法。

Retrofit 1.9

public class ServiceGenerator {

    public static final String API_BASE_URL = "http://your.api-base.url";

    private static RestAdapter.Builder builder = new RestAdapter.Builder()
                .setEndpoint(API_BASE_URL)
                .setClient(new OkClient(new OkHttpClient()));

    public static  S createService(Class serviceClass) {
        RestAdapter adapter = builder.build();
        return adapter.create(serviceClass);
    }
}

Retrofit 2

public class ServiceGenerator {

    public static final String API_BASE_URL = "http://your.api-base.url";

    private static OkHttpClient httpClient = new OkHttpClient();
    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    public static  S createService(Class serviceClass) {
        Retrofit retrofit = builder.client(httpClient).build();
        return retrofit.create(serviceClass);
    }
}

ServiceGenerator类 用Retrofit的 RestAdapter-Builder与给定的API基础url来创建一个新的REST客户端。例如,Github的API基础url是https://developer.github.com/v3/

serviceClass类定义了用于API请求的注解了的类或接口。接下来的章节会向我们展示Retrofit的实用的用法,还有如何写出一个值得仿效的客户端。

JSON 映射

Retrofit 1.9 默认提供Google的GSON。你需要做的只是定义好你的response对象,之后这个response将会被自动地映射。

当用Retrofit 2时,你需要对Retrofit对象显式地添加一个转换器(converter).这就是我们要在Retrofit的 builder上调用.addConverterFactory(GsonConverterFactory.create())去集成GSON作为默认的JSON转换器的原因。

Retrofit实战

好的,让我们写一个 REST的 客户端向Github请求数据。

首先,我们必须创建一个接口和定义需要的方法。

GitHub 客户端

接下来的代码定义了一个GithubClient和一个请求仓库的贡献者列表的方法。它也说明了Retrofit的参数替换功能(当调用对象的方法时,在定义的路径中的{owner} 和 {repo}将会被所给的变量所替换)。

Retrofit 1.9

public interface GitHubClient {
    @GET("/repos/{owner}/{repo}/contributors")
    List contributors(
        @Path("owner") String owner,
        @Path("repo") String repo
    );
}

Retrofit 2

public interface GitHubClient {
    @GET("/repos/{owner}/{repo}/contributors")
    Call> contributors(
        @Path("owner") String owner,
        @Path("repo") String repo
    );
}

这里定义了一个Contributor类,这个类包含了要映射到response数据的所有需要的属性。

static class Contributor {
    String login;
    int contributions;
}

关于之前提到的JSON映射:GithubClient 定义了一个返回类型是List的命名为contributors的方法。Retrofit确保服务端返回的response 能够得到正确的映射(在这里 服务端返回的response 匹配所给的Contributor类)。

API 请求样例

下面的片段说明了如何用ServiceGenerator去实例化你的客户端,具体点,这个Github客户端就是得到contributors的方法 用到的客户端。[Retrofit github-client example](https://github.com/square/retrofit/tree/master/samples/src/main/java/com/example/retrofit)是一个修改后的版本。

当执行Github的这个例子的时候,你需要手动地在ServiceGenerator中用"https://developer.github.com/v3/"作为基础的url。另一个选择是用额外的createService()方法接受两个参数: 客户端类名,和基础的url。

Retrofit 1.9

public static void main(String... args) {  

    // 创建一个非常简单的 指向Github API端点的 RSET 适配器
    GitHubClient client = ServiceGenerator.createService(GitHubClient.class);

    // 得到并打印这个仓库的贡献者列表
    List contributors =
        client.contributors("fs_opensource", "android-boilerplate");

    for (Contributor contributor : contributors) {
        System.out.println(
                contributor.login + " (" + contributor.contributions + ")");
    }
}

Retrofit 2

public static void main(String... args) {
    // 创建一个非常简单的 指向Github API端点的 RSET 适配器
    GitHubClient client = ServiceGenerator.createService(GitHubClient.class);

    // 得到并打印这个仓库的贡献者列表
    Call> call =
        client.contributors("fs_opensource", "android-boilerplate");

    List contributors = call.execute().body();

    for (Contributor contributor : contributors) {
        System.out.println(
                contributor.login + " (" + contributor.contributions + ")");
    }
}

下面会讲什么

下一篇文章主要解释了如何用Retrofit去实现基本的认证。我们将会展示一些用 用户名/邮箱 和密码验证webservices或者APIs的代码样例。进一步讲,之后的文章主要会涉及到用tokens(包括OAuth)的API认证

我们希望你能对这个概览感到满意,也希望你能用Retrofit来发出你的第一个请求。

对Retrofit的讲解还不够? 买我们的书吧!

学会如何在Android上用Retrofit创建一个高效率的RSET客户端,通过复杂的APIs提升你的效率,享受工作的乐趣。





原文发布时间为:2016年01月07日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-12-21 17:39:03

Retrofit 入门基础的相关文章

PHP初学者入门基础知识

PHP入门基础知识总结及入门实例详细讲解. 一,PHP脚本代码标记 PHP的脚本是文件中一对特殊标记所包括的内容,如ASP是"<%....%>",PHP可看成是"<?...?>". 然而为了适应XML标准以将PHP嵌入到XML或XHTML中,PHP不建议使用短格式的"<?...?>",而建议使用长格式标记"<?php...?>" 此外PHP代码块还支持 <script la

XML开发入门基础:查看XML文件

在所有现代浏览器中,可能够查看原始的XML文件. 不要指望XML文件会直接显示为HTML页面. 查看XML文件 开发入门基础:查看XML文件-">查看这个XML文件:note.xml 打开XML文件 -XML文档将显示为代码颜色化的根以及子元素.通过点击元素左侧的加号或减号,可以展开或收起元素的结构.如需查看不带有 + 和 - 符号的源代码,请从浏览器菜单中选择"查看源代码". 注释:在Netscape, Opera 以及Safari 中,仅仅会显示元素文本!要查看原始

XML开发入门基础:XML树结构

XML文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个XML文档实例 XML使用了简单的具有自我描述性的语法: <?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</h

Java Mybatis框架入门基础教程_基础知识

一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

Manifest.xml 入门基础 (四) &amp;lt;application&amp;gt;标签

Manifest.xml 入门基础 (四) <application>标签 一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性(如icon,label,permission等) <application android:allowClearUserData=["true" | "false"] android:allowTaskReparenting=["true

Manifest.xml 入门基础(一) 概述与&amp;lt;manifest&amp;gt;标签

Manifest.xml 入门基础 (一)概述与<manifest>标签 第零讲 概述 每个应用的根目录中都必须包含一个 AndroidManifest.xml 文件(且文件名精确无误). 清单文件向 Android 系统提供应用的必要信息,系统必须具有这些信息方可运行应用的任何代码. 此外,清单文件还可执行以下操作: (1)为应用的 Java 软件包命名.软件包名称充当应用的唯一标识符. (2)描述应用的各个组件,包括构成应用的 Activity.服务.广播接收器和内容提供程序.它还为实现每

Manifest.xml 入门基础 (三) &amp;lt;uses-sdk&amp;gt;标签

Manifest.xml 入门基础 (三) <uses-sdk>标签 <uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer" /> 用于表明应用程序与一个或多个版本 Android 平台的兼容性,以整数型的 API 级别来表示. 应用程序声明的 API 级别将与给

json 入门基础教程 推荐_json

如果您阅读了本系列前面的文章,那么应已对数据格式有了相当的认识.前面的文章解释了在许多异步应用程序中如何恰当地使用纯文本和简单的名称/值对.可以将数据组合成下面这样的形式: firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com   这样就行了,不需要再做什么了.实际上,Web 老手会意识到通过 GET 请求发送的信息就是采用这种格式. 然后,本系列讨论了 XML.显然,XML 得到了相当多的关注(正面和负面的评价都有

xhEditor编辑器入门基础_网页编辑器

1.1. 在线可视化HTML编辑器概述 在Web程序应用中,最常见的一种行为是信息和言论的发布和交流.而在信息发布的同时,往往会有对信息发布的格式.类型和功能上的需求,比如:加粗.下划线等等,以使文字信息能够更形象更美观的传达给阅读者,同时也提高信息发布的工作效率.在这个需求的背景下,HTML在线编辑器就应运而生了. 顾名思义,在线HTML编辑器就是在线编辑HTML代码的工具,它经常被应用于留言板留言.论坛发贴.Blog编写日志或等需要用户输入HTML的地方,是Web应用的常用模块之一.在线HT