api接口的封装
public interface Api { //登录 @POST("/") Call<LoginBean> getLoginMessage(); //注册验证码 @POST("index/sendcode") Call<RegistrationValiDataBean> getRegistrationValidataCode(); //注册 @POST("index/register") Call<RegistrationBean> getRegistrationMessage(); //社区
当没有参数的时候可以使用“/”或者“.”发送请求 @GET("/") Call<String> getCommunityMessage();
}
自定义拦截器
//网络请求拦截器 public class CoustomInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request; request = chain.request(); Response response = chain.proceed(request); return response; }
}
接口对应一个service
private Call mCall; public static RegistrationService getInstanceRegistrationService(){ return new RegistrationService(); } public void requestRegistrationApi(final OnRequest loginListen){ final Call<RegistrationBean> loginCall = buildApi(buildClient()).getRegistrationMessage(); loginCall.enqueue(new Callback<RegistrationBean>() { @Override public void onResponse(Call<RegistrationBean> call, Response<RegistrationBean> response) { if (loginListen != null){ loginListen.OnRequestSuccess(call,response); } } @Override public void onFailure(Call<RegistrationBean> call, Throwable t) { if (loginListen != null){ loginListen.OnRequestFail(call,t); } } }); mCall = loginCall; } //关闭请求 在ondestory public void cancle(){ if (mCall != null){ mCall.cancel(); } } //build OkhttpClient private OkHttpClient buildClient(){ return new OkHttpClient.Builder() .addInterceptor(new CoustomInterceptor()).build(); } //实例化 Api private Api buildApi(OkHttpClient client){ return new Retrofit.Builder().baseUrl(HttpUrl.BASE_URL).client(client) .addConverterFactory(GsonConverterFactory.create()) .build().create(Api.class); }
关闭请求
@Override protected void onDestroy() { super.onDestroy(); if (mLoginService != null){ mLoginService.cancle(); }
}
网络请求监听接口使用泛型
//网络请求的监听 泛型 public interface OnRequest<T> { void OnRequestSuccess(Call<T> call, Response<T> response); void OnRequestFail(Call<T> call,Throwable throwable); }
使用方法
实例化监听
mOnRequest = new OnRequest<String>() { @Override public void OnRequestSuccess(Call<String> call, Response<String> response) { mTextView.setText(response.body()); } @Override public void OnRequestFail(Call<String> call, Throwable throwable) { } }; if (mCommunityService == null) { mCommunityService = CommunityService.getInstanceCommunityService(); mCommunityService.requestCommunityApi(mOnRequest); } else {
service发送请求 mCommunityService.requestCommunityApi(mOnRequest); }
更改数据类型String ,一般使用gson,有时候测试要用String 可以使用自定义数据类型Converter
.addConverterFactory(new Converter.Factory() { @Nullable @Override public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { return new Converter<ResponseBody, String>() { @Override public String convert(ResponseBody value) throws IOException { return value.string(); } }; } })
一般使用的是
.addConverterFactory(GsonConverterFactory.create()) // Gson解析