浅谈一下Androit中对Retrofit的使用。

Retrofit 是大名鼎鼎的Square开源的一款适用于Android和Java的网络请求的库,其实就是对OkHttp做了一些封装。Retrofit使用注解,简化了网络请求。我们对Retrofit进行初步的使用。

1.添加依赖和权限

在 build.gradle 文件中添加依赖,在 Manifest.xml文件中添加所需的网络权限。

// build.gradle
compile 'com.squareup.retrofit:retrofit:2.0.1-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

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

在 Retrofit 2.0 中,如果要将 JSON 数据转化为 Java 实体类对象,需要自己显式指定一个 Gson Converter。

2.创建Java接口

public interface APIInterface {
  @GET("/users/{user}") 
  Call<TestModel> repo(@Path("user") String user);

在后文构造 Retrofit 对象时会添加一个 baseUrl(https://api.github.com)。

在此处 GET 的意思是 发送一个 GET请求,请求的地址为:baseUrl + “/users/{user}”。

{user} 类似于占位符的作用,具体类型由 repo(@Path(“user”) String user) 指定,这里表示 {user} 将是一段字符串。

Call 是一个请求对象,表示返回结果是一个 TestModel 类型的实例。

3.Retrofit请求会将Json数据java实体类,在这里我们需要创建一个Model

public class TestModel {
  private String login;

  public String getLogin() {
    return login;
  }

  public void setLogin(String login) {
    this.login = login;
  }
}

4.进行连接通信(构建Retrfit对象,建立请求链接)

Retrofit retrofit= new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build();

注意这里添加的 baseUrl 和 GsonConverter,前者表示要访问的网站,后者是添加了一个转换器。

接着,创建我们的 API 接口对象,这里 APIInterface 是我们创建的接口:

APIInterface service = retrofit.create(APIInterface.class);

使用 APIInterface 创建一个『请求对象』:

Call<TestModel> model = service.repo("Guolei1130");

注意这里的 .repo(“Guolei1130”) 取代了前面的 {user}。到这里,我们要访问的地址就成了:

https://api.github.com/users/Guolei1130

可以看出这样的方式有利于我们使用不同参数访问同一个 Web API 接口,比如你可以随便改成 .repo(“ligoudan”)

最后,就可以发送请求了!

model.enqueue(new Callback<TestModel>() {
  @Override
  public void onResponse(Call<TestModel> call, Response<TestModel> response) {
    // Log.e("Test", response.body().getLogin());
    System.out.print(response.body().getLogin());
  }

  @Override
  public void onFailure(Call<TestModel> call, Throwable t) {
    System.out.print(t.getMessage());
  }
  });

至此,我们就利用 Retrofit 完成了一次网络请求。

——————————————————————以上只是简单的使用————————————————

Retrofit中有用到很多的注解。下图是Retrofit的各类注解。
这里写图片描述

其中,包含了与请求方法相关的 @GET、@POST、@HEAD、@PUT、@DELETA、@PATCH,和参数相关的@Path、@Field、@Multipart等。

在之前我们转换接口的时,我们是这样写的:

public interface APIInterface {
  @GET("/users/{user}") 
  Call<TestModel> repo(@Path("user") String user);

很明显就可以看到@GET是关于一个请求的,而@Path我们用它来充当一个占位符的功能,它是参数相关的。

Header设置
当我们要设置网络请求的Header时,Retrofit提供了我们两种方法(静态配置和动态配置)。

静态配置,直接在接口中指定Header参数

@Headers({
  "User-Agent: Retrofit-Sample-App"
})

动态配置,在接口中注解但不指定,后面实例化请求体时可通过 .getUser 指定 Header。

@GET("/user")
Call<TestModel> getUser(@Header("Authorization") String authorization)

GET请求参数配置

在我们发送GET请求的时候,如果需要设置GET的参数,Retrofit注解提供俩种方式来进行配置,分别是 @Query(一个键值对)和 @QueryMap(多对键值对)。

Call<TestModel> one(@Query("username") String username);
Call<TestModel> many(@QueryMap Map<String, String> params);

POST 请求参数设置

POST 的请求与 GET 请求不同,POST 请求的参数是放在请求体内的。所以当我们要为 POST 请求配置一个参数时,需要用到 @Body 注解:

Call<TestModel> post(@Body User user);

这里的 User 类型是需要我们去自定义的:

public class User {
  public String username;
  public String password;

  public User(String username,String password){
    this.username = username;
    this.password = password;
}

最后在获取请求对象时:
User user = new User(“lgd”,”123456”);
Call model = service.post(user);

就能完成 POST 请求参数的发送,注意该请求参数 user 也会转化成 Json 格式的对象发送到服务器。

总结,以上就是Retrofit的一个简单地使用。谢谢!!!!

猜你喜欢

转载自blog.csdn.net/qq_38367671/article/details/78662679