剑客
关注科技互联网

Retrofit2的使用

Retrofit使用介绍。

About Retrofit

项目的主页在这里: http://square.github.io/retrofit/

如何使用

非常简单,分为以下几步:

i. 添加依赖和权限

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

//build.gradle
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

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

ii.创建Retrofit实例

创建Retrofit实例时需要通过Retrofit.Builder,并调用baseUrl方法设置URL。

注: Retrofit2 的baseUlr 必须以 /(斜线) 结束。

Retrofit mRetrofit= new Retrofit.Builder()
        .baseUrl("https://api.github.com")
        .build();

iii.将http接口转换为Java API接口

比如我们想要从下面的URL中获取数据

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

那么,我们就需要将其转换成Java API:

public interface APIInterface {
    @GET("/users/{user}") //这里的{user} 表示是一个变量
    Call<ResponseBody> getUserInfo(@Path("user") String user); /*这里的user表示的是上面的{id}
}

在这里,http路径并不完整,我们只提供了/user/{user},这是因为在构造 Retrofit 对象时会添加一个 baseUrl( https://api.github.com)。

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

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

其中,retrofit提供的与请求方法相关的注解有 @GET、@POST、@HEAD、@PUT、@DELETA、@PATCH,和参数相关的@Path、@Field、@Multipart等。

iv.创建API接口对象

需要注意的是,上一步定义的interface不是class,所以我们是无法直接调用该方法,我们需要用Retrofit创建一个代理对象:

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

v.接口调用

一切就绪后,我们就要通过retrofit对象来进行网络操作了。传入参数,然后回调中获取结果:

Call<ResponseBody> model = service.getUserInfo("yishuihe");
model.enqueue(new retrofit2.Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            try {
                Log.d(TAG, "onResponse:" + response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {

        }

});

注意事项

  • retrofit2相对于1有很大的改变,主要在引入包的时候要确认引入的是2,而且使用2中的方法。关于其演进过程,可以看看 作者自己的解析
    .

Gsonformat

作用:Android studio插件,一般接口返回数据后要建立自己的bean,Gsonformat帮助你快速生成,不用一条一条去写。比jsonschema2pojo更加简单。

安装步骤:Android studio-Settings-Plugins-搜Gsonformat-Install Plugin

效果预览:

GET详细解析

服务器接口有很多中,本人经验有限,目前接触较多为以下几种:

直接请求型

即直接对某一地址或组合某一地址发起请求

如:对/result和/result/{id}发起GET请求,其中{id}中的id在实际使用时填写实际值即可.

带参查询型

对某一地址进行带参查询请求

如: https://www.baidu.com/s?wd=123为对接口https://www.baidu.com/s进行参数为wd=123的GET查询请求
.

带Header型

即请求时要求带上Header

Retrofit中如何写?

直接请求型

1.如果是直接请求某一地址,写法如下:

@GET(“/record”)

Call

getResult();

2.如果是组合后直接请求,如/result/{id}写法如下:

@GET(“/result/{id}”)

Call

getResult(@Path(“id”) String id);

带参查询型

如12306的查询接口

https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-03-18&from_station=BJP&to_station=CDW,写法如下
:

@GET(“/otn/lcxxcx/query”)

Call

query(@Query(“purpose_codes”) String codes, @Query(“queryDate”) String date,

@Query(“from_station”) String from, @Query(“to_station”) String to)

带Header型

比如要更新某个账户信息,其接口地址为/info,需要带的Header有设备信息device,系统版本version,还要带请求参数要更新账户的id,代码如下:

@POST(“/info”)

Call

Reference

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址