美文网首页
retrofit 由浅入深(一) 基本使用

retrofit 由浅入深(一) 基本使用

作者: 极客天空 | 来源:发表于2020-04-13 17:24 被阅读0次

retrofit简介

RESTful 网络请求框架的封装
网络请求的本质是OKHttp来完成,而retrofit 仅负责网络接口的封装

retrofit实例

一 retrofit的安装

我们将以JSON格式发送和接收数据,因此我们也添加了converter-gson依赖项
gradle 方式:

dependencies {
    .....
    //retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.6.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
}

在AndroidManifest.xml添加网络访问权限

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

二 REST API建模

  1. REST API 接口
    http://mock.fulingjie.com/mock/api/address.php
{
  "code": 0,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "default": true,
      "name": "姓名1",
      "phone": "123456",
      "address": "地址1"
    },
    {
      "id": 2,
      "default": false,
      "name": "姓名2",
      "phone": "123456",
      "address": "地址2"
    }
  ]
}
  1. 业务数据模型
public class AddrApiResponse {
    private List<AddressBean> data;
    private String code ;
    private String message ;
    public String toString() {
        return "UserApiResponse [data=" + data.toString() + "]";
    }
}
public class AddressBean {
    private int id;
    @SerializedName("default")
    private boolean defaultX;
    private String name;
    private String phone;
    private String address;
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    public boolean isDefaultX() {
        return defaultX;
    }
    public void setDefaultX(boolean defaultX) {
        this.defaultX = defaultX;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "AddressBean{" +
                "id=" + id +
                ", defaultX=" + defaultX +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
  1. 业务接口
    Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数
public interface AddrService {
    @GET("/mock/api/{filename}")
    public Call<AddrApiResponse> getAddrs(@Path("filename") String filename);
}

网络请求的完整 Url =在创建Retrofit实例时通过.baseUrl()设置 +网络请求接口的注解设置(下面称 “path“ )


网络请求规则.png
  1. 网络请求


    网络请求1.png
  2. 标记类型


    网络请求标记.png
  3. 请求参数


    网络请求参数.png

    4.请求方法


    网络请求方法.png
  • 我们可以使用适当的改造注释为每个HTTP方法:@GET,@POST,@PUT,@DELETE,@PATCH或@HEAD。
  • 在方法注释中,我们应该指定REST资源的相对端点URL。在这种情况下,它是 - "/api/users/{id}"。
  • 在方法声明中,我们必须将服务器所期望的数据返回到一个类型化的Retrofit Call< >类中。
  • 在方法参数中,我们可以传递路径和查询参数,并在PUT / POST请求中请求正文。

三 retrofit使用

在android 4.0以后所有网络请求 不能在UI线程执行 所以同步请求网络也需要在子线程来完成

public class AddrServiceClient {
    //同步方法调用
    public void getAddrsData(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
                    Retrofit retrofit = new Retrofit.Builder()
                            .baseUrl("http://mock.fulingjie.com/")
                            .addConverterFactory(GsonConverterFactory.create())
                            .client(httpClient.build())
                            .build();
                    AddrService service = retrofit.create(AddrService.class);
                    Call<AddrApiResponse> callSync = service.getAddrs("address.php");
                    Response<AddrApiResponse> response = callSync.execute();
                    AddrApiResponse apiResponse = response.body();
                    Log.d("rrcc",apiResponse.toString());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }).start();
    }
    //异步方法调用
    public void getSyncAddrs(){
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://mock.fulingjie.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient.build())
                .build();
        AddrService service = retrofit.create(AddrService.class);
        Call<AddrApiResponse> callSync = service.getAddrs("address.php");

        callSync.enqueue(new Callback<AddrApiResponse>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<AddrApiResponse> call, Response<AddrApiResponse> response) {
                //请求处理,输出结果
                System.out.println(response.toString());
            }
            //请求失败时候的回调
            @Override
            public void onFailure(Call<AddrApiResponse> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });
    }
}

文章参考:
https://www.jianshu.com/p/865e9ae667a0
http://www.leftso.com/blog/664.html

相关文章

  • retrofit 由浅入深(一) 基本使用

    retrofit简介 RESTful 网络请求框架的封装网络请求的本质是OKHttp来完成,而retrofit 仅...

  • Retrofit学习(二)

    之前的Retrofit学习(一)了解了一下Retrofit的最基本使用,不过目前最流行的Retrofit使用方式是...

  • Retrofit2

    一、Retrofit2 GitHub:Retrofit2Demo 二、Retrofit2概念 三、使用 四、基本使...

  • Retrofit2源码分析

    Retrofit源码分析基于2.4.0。 关于Retrofit的基本使用可以参照 Retrofit官网。 Retr...

  • Retrofit 2.0的封装与异常处理

    Retrofit 2.0的基本使用,网上教程很多,Retrofit 官方教程 定义接口 初始化Retrofit 调...

  • retrofit 由浅入深(二)创建使用步骤

    retrofit使用 创建描述网络请求的接口 通过动态代理的方式 转换成http请求接口中的方法 都需要使用注解来...

  • Retrofit基本使用

    Retrofit 作为Android和Java类型安全的HTTP客户端,记得刚毕业那会面试,面试官问我用过Retr...

  • Retrofit基本使用

    上一章节讲解了OkHttp的基本使用,这节就来看看Retrofit的基本使用调用的网址如下: Retrofit的单...

  • Retrofit基本使用

    Retrofit基本使用 内容 基础 接口配置 发送请求异步请求 && 示例一Convert && 示例二RxJa...

  • Retrofit基本使用

    Retrofit是由著名的 Square 公司开源的一个基于OkHttp实现网络请求的框架,以其简易的接口配置、强...

网友评论

      本文标题:retrofit 由浅入深(一) 基本使用

      本文链接:https://www.haomeiwen.com/subject/ysknmhtx.html