开始在Android上使用Retrofit并创建Http请求客户端

什么是Retrofit

官方对Retrofit的定义是:一个在Android和Java中类型安全的REST客户端
你可以使用注解去描述HTTP请求,URL 参数替换和查询参数这些都默认的得到完整的支持。此外,它还提供了自定义请求头、多种类型请求体、文件上传和下载、模拟相应和其他更多的功能。接下来我们将会看到这些具体是实现详细。

先准备你的安卓项目

在android studio上用Gradle构建你的新项目。当然也可以选择在IDE上用Maven构建项目。

定义依赖库:Gradle or Maven

首先你的项目需要依赖Retrofit。在你所选的编译系统中,在文件build.gradle 或 pom.xml 中导入你所以依赖的指定Retrofit版本,当运行去编译代码的时候,这个编译系统会下载和提供制定的依赖库到你的项目中。

Retrofit2

build.gradle
dependencies {  
    // Retrofit & OkHttp
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
}

Android网络权限

用Retrofit进行网络请求需要在AndroidManifest.xml中添加网络权限

<uses-permission android:name="android.permission.INTERNET"/> 

如何描述API端点

首先你需要定义接口和对应的请求方法

GitHub Client

以下demo定义了GitHubClient接口和reposForUser方法去请求一组仓库贡献者列表数据。其中@GET注解描述了这个请求用了HTTP GET方法。这段demo也阐明了Retrofit路径参数替换的功能用法。这个定义的方法中的{user}路径将会被调用reposForUser方法中的变量值所替换。

public interface GitHubClient {  
    @GET("/users/{user}/repos")
    Call<List<GitHubRepo>> reposForUser(
        @Path("user") String user
    );
}

GitHubRepo类定义。这个类包含的必须属性和响应数据一一对应。

public class GitHubRepo {  
    private int id;
    private String name;

    public GitHubRepo() {
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
   }

关于先前提到的JSON映射:GitHubClient接口定义的返回类型为List的方法。Retrofit 可以确保服务器响应

Retrofit REST 客户端

描述完了API接口和对象模型之后,我们就可以进行真正的请求了。Retrofit的所有请求都是基于1.9或2.0+版本。这两个版本你都可以很流畅的创建和配置API。最后,你可以使用builder来对所有请求设置一些设置一些常用的选项,比如:url或者转换器。

Retrofit 2
String API_BASE_URL = "https://api.github.com/";

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

Retrofit.Builder builder =  
    new Retrofit.Builder()
            .baseUrl(API_BASE_URL)
            .addConverterFactory(
                GsonConverterFactory.create()
            );

Retrofit retrofit =  
    builder
        .client(
            httpClient.build()
        )
        .build();

GitHubClient client =  retrofit.create(GitHubClient.class); 

上面的demo片段使用了最简单的设置选项,还有更多的设置选项让你去控制请求。但是这已经足够我们用来作为第一个请求的列子了。

JSON 映射

大多数情况下,请求服务器和服务器响应返回数据,都不是用java对象。更多的是用像JSON这种格式的语言来传。
当使用Retrofit 2,你需要向Retrofit对象添加一个转换器,将返回的JSON数据转成对应给的类对象。在build.gradle文件中添加一行下面这个代码,引进Gson转换器给Retrofit 2用。

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

当然你也用转换器来转换xml等其他格式的数据,请参考:
转换器转换其他格式

Retrofit 的使用

在大量的准备工作之后,现在可以很简便的请求。只用几行demo就可以进行请求

Retrofit 2

使用client去获取call对象。只要你用获取的call对象调用.enqueue,请求将会被Retrofit处理。

// Create a very simple REST adapter which points the GitHub API endpoint.
GitHubClient client =  retrofit.create(GitHubClient.class);

// Fetch a list of the Github repositories.
Call<List<GitHubRepo>> call =  
    client.reposForUser("fs-opensource");

// Execute the call asynchronously. Get a positive or negative callback.
call.enqueue(new Callback<List<GitHubRepo>>() {  
    @Override
    public void onResponse(Call<List<GitHubRepo>> call, Response<List<GitHubRepo>> response) {
        // The network call was a success and we got a response
        // TODO: use the repository list and display it
    }

    @Override
    public void onFailure(Call<List<GitHubRepo>> call, Throwable t) {
        // the network call was a failure
        // TODO: handle error
    }
});

当调用成功之后,Retrofit 会返回一个方便的List,你可以使用它显示在你的app上。
译至:
https://futurestud.io/tutorials/retrofit-getting-started-and-android-client
小生第一次翻译,哪里不好或有误的希望各位客官轻喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值