UaseApi: 接口的创建,主要用于封装一个模块中,多个请求接口,其中包含请求参数,请求方式,请求URL,请求方法名
添加依赖:
//添加依赖jackson依赖
compile 'com.squareup.retrofit2:converter-jackson:2.0.1'
//添加retrofit2依赖
compile 'com.squareup.retrofit2:retrofit:2.0.1'
//添加日志信息拦截依赖
compile 'com.squareup.okhttp3:logging-interceptor:3.7.0'
//添加对rxJava的支持
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
//ButterKnife 7.0.1对应sdk24
compile 'com.jakewharton:butterknife:8.5.1'
apt 'com.jakewharton:butterknife-compiler:8.5.1'
案例:
Retrofit2的基本使用:
//获取一个Retrofit2对象
Retrofit Retrofit = new Retrofit.Builder()
.baseUrl(UrlConstant.BASE_URL_TEST)
.build();
//通过Retrofit实例,创建服务接口对象
ApiService apiService = Retrofit.create(ApiService.class);
//通过接口服务对象,调用接口中的方法,获取call对象
Call call = apiService.getNetData();
//通过call对象执行网络请求(同步请求execute,异步请求enqueue)
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
ResponseBody body = response.body();
//获取json字符串
try {
String result = body.string();
tv_content.setText(result);
Log.i(TAG, result);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
Log.i(TAG, "请求失败");
}
});
1、Retrofit2设置Json转换器
为Retrofit2添加json转换器;
当创建一个Retrofit实例的时候可以为其添加一个Json转换器,这样就会自动将Json格式的响应体转换为所需要的Java对象。
GsonFormat是AndroidStudio中的一个插件。
创建retrofit实例,我们通过addConverterFactory指定一个factory来对响应反序列化
//进行一系列的序列化设置
ObjectMapper mapper = new ObjectMapper();
//创建Retrofit实例:addConverterFactory(JacksonConverterFactory.create(mapper))
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(UrlConstant.BASE_URL2)
.addConverterFactory(JacksonConverterFactory.create(mapper))
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call call = apiService.addJsonConvertFactoryTest(map);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
LoginEntity bodyList = response.body();
Log.i(TAG, bodyList.getMsg());
Log.i(TAG, bodyList.getData().getCity()+ "");
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
2、Retrofit2手动设置网络请求客户端
可以在OkHttpClient中进行一系列的网络请求设置
OkHttpClient client = new OkHttpClient.Builder()
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(UrlConstant.BASE_URL_TEST)
.addConverterFactory(JacksonConverterFactory.create())
//手动设置OkHttpClient客户端
.client(client)
.build();
3、Retrofit2添加拦截器,获取日志信息
使用自定义的OkHttpClient
在retrofit2.0中是没有日志功能的;但是retrofit2.0中依赖OkHttp,所以也就能够通过OkHttp中的interceptor来实现获取底层的请求和响应日志;
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(UrlConstant.BASE_URL_TEST)
.addConverterFactory(JacksonConverterFactory.create())
//手动设置OkHttpClient客户端
.client(client)
.build();
4、Retrofit2添加请求头
//使用@Headers注解,添加请求头信息
@Headers({
"Content-Type: application/json",
})
@FormUrlEncoded
@POST("login")
Call addJsonConvertFactoryTest(@FieldMap Map map);
5、Retrofit2通过Https协议访问网络配置
本事上是OkHttp协议支持https协议。
6、Retrofit2设置缓存
在自定义的OkHttpClient中进行设置
ApiService接口中的代码:
package com.example.administrator.retrofit2;
import com.example.administrator.retrofit2.entity.ItemEntity;
import com.example.administrator.retrofit2.entity.LoginEntity;
import com.example.administrator.retrofit2.entity.Student;
import java.util.List;
import java.util.Map;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;
/**
* Created on 2017/5/9.
* Author:crs
* Description:ApiService 主要用于封装网络请求参数和url
*/
public interface ApiService {
//请求方式;url参数;没有请求参数;返回值类型为Call
@GET("basil2style")
Call getNetData();
//获取第一页数据,存在子url
@GET("article/page=1")
Call getPageData();
@GET("article/list/{type}?")
Call getListData(@Path("type")String type, @Query("page")int page);
//为Retrofit添加json转化器
@GET("basil2style")
Call> addJsonConvertFactory();
//为Retrofit添加json转化器
//使用@Headers注解,添加请求头信息
@Headers({
"Content-Type: application/json",
})
@FormUrlEncoded
@POST("login")
Call addJsonConvertFactoryTest(@FieldMap Map map);
@GET("search/repositories")
Call queryRetrofitByGetCallMap(@QueryMap Map map);
@GET("search/repositories")
Call queryRetrofitByGetCall(@Query("q")String owner, @Query("since")String time,
@Query("page")int page, @Query("per_page")int per_Page);
@GET("repos/{owner}/{repo}/contributors")
Observable> contributorsByRxJava(@Path("owner") String owner, @Path("repo") String repo);
}
借鉴此博客: http://blog.csdn.net/ljd2038/article/details/51046512