Retrofit超基础使用示例
刚刚开始尝试使用Retrofit2的时候,由于第一次使用这种带注解,果断看着蒙蔽啊。不懂套路,完全无从下手啊,所以我决定记录一下最基础简单的一些规则。
编程的任何新技术,我都主张先用上,再学习。
流程上来说,步骤是这样的:
⑴定义一个接口;
⑵创建一个Retrofit对象,创建API的实例;
⑶通过实例获取Call对象进行处理;
先说第一步:
从@GET,@Path,@Query这三个说起,其他的就先不说了,等用了这三个几次之后再看文档,就能很快速的明白了。我是为了演示,写在了一起,实际应用请各自独立。
package com.shareye.newsmanager.model.http;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;
/**
* Created by Shareye on 2016/4/14.
*/
public interface GoogleApi {
/**
* 1.一会儿我们将声明基本URL为"https://www.google.com/"
* 2.目标地址"https://www.google.com/doodles/"
* @Get 首相说明是get方法,然后括号中的参数将作为基本参数后面的拼接字符串,如果没有需要拼接的,可以为"",也可以直接写完整地址
*"doodles/"将会金额基本地址拼接,得到完整目标地址
* @return Call<String>类型的数据
*/
@GET("doodles/")
Call<String> getString();
/**
* 1.一会儿我们将声明基本URL为"https://www.google.com/"
* 2.目标地址"https://www.google.com/doodles/120th-anniversary-of-first-modern-olympic-games"
* @Get 上面说过,这里{}的语法是将进行替换,@Path标示后面的参数将会替换在那个位置。{}允许有多个,相应的参数就要多个且一一对应
*word1将会填充到{word1},然后与基本地址拼接,得到完整目标地址
* @return Call<String>类型的数据
*/
@GET("{word1}/120th-anniversary-of-first-modern-olympic-games")
Call<Integer> getInt(@Path("word1") String word1);
/**
* 1.一会儿我们将声明基本URL为"https://www.google.com/"
* 2.目标地址"https://www.google.com/doodles/?q=春节"
* @Query 标示后面的值会与其括号的参数进行拼接(?q=keyword)后,再拼接前面的整体参数。
* keyword 查询的关键字,
* @return Call<String>类型的数据
*/
@GET("doodles/")
Call<String> getSpringFestival(@Query("q")String keyword);
//将上面的"doodles/"作为输入参数
@GET("{word1}/")
Call<String> getSpringFestival(@Path("word1")String word1,@Query("q")String keyword);
//更直接点
@GET("doodles/?q=春节")
Call<String> getSpringFestival();
}
接下来是第二步:
先就基础的几个配置设置一下,其他的后续拓展。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.google.com/")//配置基础URL
//.client(xxx)//可以不设置,默认是OkHttpClient
.addConverterFactory(GsonConverterFactory.create())//使用Gson解析数据
//.addCallAdapterFactory(rxFactory)//RxJava的,初期依旧不用理会
.build();
GoogleApi api = retrofit.create(GoogleApi.class);
第三步:通过获取的api实例来调用,这里选择了异步的调用方法,返回值在response中实际包含。
api.getString().enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
//这里是对成功返回做操作
}
@Override
public void onFailure(Call<String> call, Throwable t) {
//请求失败的操作处理
}
});