首先需要引入类库
/*网络请求*/
implementation 'com.squareup.retrofit2:retrofit:2.2.0'
implementation 'com.squareup.retrofit2:retrofit-converters:2.2.0'
implementation 'com.squareup.retrofit2:retrofit-adapters:2.2.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.3.1'
请求类的实现 ApiRequest .java
public class ApiRequest {
/**
* 实例化okhttp对象
*/
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS);
/**
*
*/
private static Retrofit.Builder builder = new Retrofit.Builder()
.addConverterFactory(new NullOnEmptyConverterFactory())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Api.SERVER);
/**
* @param serviceClass
* @param <S>
* @return
*/
public synchronized static <S> S createService(Class<S> serviceClass) {
httpClient.interceptors()
.add(new HttpInterceptor());
Retrofit retrofit = builder.client(httpClient.build()).build();
return retrofit.create(serviceClass);
}
/**
*
*/
public static class HttpInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
Request request = builder.addHeader("Content-type", "application/json").build();
return chain.proceed(request);
}
}
/**
*
*/
public static class NullOnEmptyConverterFactory extends Converter.Factory {
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
return new Converter<ResponseBody,Object>() {
@Override
public Object convert(ResponseBody body) throws IOException {
if (body.contentLength() == 0) return null;
return delegate.convert(body);
}
};
}
}
/**
* 请求入口
*
* @return
*/
public static ApiServer getApiService(){
ApiServer apiServer = createService(ApiServer .class);
return apiServer;
}
}
请求服务类的实现 ApiServer.java
public interface ApiServer {
//需要添加头
@Headers({"Content-Type: application/json","Accept: application/json"})
@POST(Api.login)
Observable<LoginResponse> requestLogin(@Body RequestBody body);
}
在Activity中的使用具体列子
/**
* @param userId
* @param userSig
*/
public void loginTask(final String userId, final String userSig){
LoginRequest loginRequest=new LoginRequest(userId,userSig);
ApiRequest.getApiService().requestLogin(loginRequest.requestBody())
.subscribeOn(Schedulers.newThread())
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<LoginResponse>() {
@Override
public void onCompleted() {
LogUtils.newInstance().log_v("onCompleted");
}
@Override
public void onError(Throwable e) {
LogUtils.newInstance().log_v("login="+e);
}
@Override
public void onNext(LoginResponse response) {
LogUtils.newInstance().log_v("login="+new Gson().toJson(response));
}
});
}