retrofit2.0 封装
来源:互联网 发布:云计算最大的特征是() 编辑:程序博客网 时间:2024/05/17 02:19
/** * 类描述:网络请求管理 <br/> * 创建人:吴冬冬<br/> * 创建时间:2017/8/4 15:58 <br/> */public class HttpManger { public static final int HTTP_MANGER_CIRCLE = 10010; private static Context mContext; private static HttpManger mHttpManger; private static OkHttpClient.Builder okhttpBuilder; private static Retrofit.Builder retrofitBuilder; private static OkHttpClient okHttpClient; private static Retrofit retrofit; public static BaseApiService apiManager; private final String baseUrl; private boolean isShowLoading = false; private int isShowLoadingType = HTTP_MANGER_CIRCLE; private HttpManger(String baseUrl, BaseApiService apiManager, boolean isShowLoading, int isShowLoadingType){ this.baseUrl = baseUrl; this.apiManager = apiManager; this.isShowLoading = isShowLoading; this.isShowLoadingType = isShowLoadingType; } public void executeGet(Context context, final String url, RetrofitCallback retrofitCallback) { Call<ResponseBody> call = apiManager.executeGet(url); if (isShowLoading == true) { retrofitCallback.addShowLoading(context, isShowLoading, isShowLoadingType); } call.enqueue(retrofitCallback); } public void executeGet(Context context, final String url, @QueryMap(encoded = true) final Map<String, String> maps, RetrofitCallback retrofitCallback) { Call<ResponseBody> call = apiManager.executeGet(url, maps); if (isShowLoading == true) { retrofitCallback.addShowLoading(context, isShowLoading, isShowLoadingType); } call.enqueue(retrofitCallback); } public void executePost(Context context, final String url, @FieldMap(encoded = true) final Map<String, String> maps, RetrofitCallback retrofitCallback) { Call<ResponseBody> call = apiManager.executePost(url, maps); if (isShowLoading == true) { retrofitCallback.addShowLoading(context, isShowLoading, isShowLoadingType); } call.enqueue(retrofitCallback); } public static final class Builder { private static final int DEFAULT_TIMEOUT = 15; private Context context; private String baseUrl; private boolean isLog = false; private Converter.Factory converterFactory; private boolean isShowLoading = false; private int isShowLoadingType = HTTP_MANGER_CIRCLE; public Builder(Context context) { okhttpBuilder = new OkHttpClient.Builder(); retrofitBuilder = new Retrofit.Builder(); if(context instanceof Activity) { this.context = ((Activity) context).getApplicationContext(); } else { this.context = context; } } /** * 添加默认地址 */ public Builder baseUrl(String baseUrl) { this.baseUrl = Utils.checkNotNull(baseUrl, "baseUrl == null"); return this; } /** * 设置okhttpClient */ @NonNull public Builder client(OkHttpClient client) { retrofitBuilder.client(Utils.checkNotNull(client, "client == null")); return this; } /** * 设置连接时间 */ public Builder connectTimeout(int timeout) { return connectTimeout(timeout, TimeUnit.SECONDS); } public Builder connectTimeout(int timeout, TimeUnit unit) { if (timeout != -1) { okhttpBuilder.connectTimeout(timeout, unit); } else { okhttpBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); } return this; } /** * 设置写时间 */ public Builder writeTimeout(int timeout) { return writeTimeout(timeout, TimeUnit.SECONDS); } public Builder writeTimeout(int timeout, TimeUnit unit) { if (timeout != -1) { okhttpBuilder.writeTimeout(timeout, unit); } else { okhttpBuilder.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); } return this; } /** * 设置读时间 */ public Builder readTimeout(int timeout) { return readTimeout(timeout, TimeUnit.SECONDS); } public Builder readTimeout(int timeout, TimeUnit unit) { if (timeout != -1) { okhttpBuilder.readTimeout(timeout, unit); } else { okhttpBuilder.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); } return this; } /** * 设置是否显示网络连接log */ public Builder addLog(boolean isLog) { this.isLog = isLog; return this; } /** * 是否显示加载框 */ public Builder addShowLoading(boolean isShowLoading){ this.isShowLoading = isShowLoading; return this; } /** * 是否显示加载框 */ public Builder addShowLoading(boolean isShowLoading, int type){ this.isShowLoading = isShowLoading; this.isShowLoadingType = type; return this; } /** * 设置添加gson解析fastJson解析。。。 */ public Builder addConverterFactory(Converter.Factory factory) { this.converterFactory = factory; return this; } public HttpManger build() { if (baseUrl == null) { throw new IllegalStateException("Base URL required."); } if (okhttpBuilder == null) { throw new IllegalStateException("okhttpBuilder required."); } if (retrofitBuilder == null) { throw new IllegalStateException("retrofitBuilder required."); } mContext = context; //ConfigLoader.init(context); retrofitBuilder.baseUrl(baseUrl); //gson /*if (converterFactory == null) { converterFactory = GsonConverterFactory.create(); }*/ if (converterFactory != null) { retrofitBuilder.addConverterFactory(converterFactory); } //rxjava /*if (callAdapterFactory == null) { callAdapterFactory = RxJavaCallAdapterFactory.create(); } retrofitBuilder.addCallAdapterFactory(callAdapterFactory);*/ //LogWraper.setDebug(isLog && !BuildConfig.DEBUG); if (isLog) { okhttpBuilder.addNetworkInterceptor( new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.HEADERS)); okhttpBuilder.addNetworkInterceptor( new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)); } okHttpClient = okhttpBuilder.build(); retrofitBuilder.client(okHttpClient); retrofit = retrofitBuilder.build(); apiManager = retrofit.create(BaseApiService.class); return new HttpManger(baseUrl, apiManager, isShowLoading, isShowLoadingType); } }}
/** * 类描述:retrofit接口服务<br/> * 创建人:吴冬冬<br/> * 创建时间:2017/8/4 14:51 <br/> */public interface BaseApiService { /** * @Url 替换url * @QueryMap 替换url中查询参数 * @Header 替换header * @FieldMap 替换post请求body中参数 * @FormUrlEncoded post请求需要加的方法注解 * @POST() 标示该方法为post请求 * @GET() 标示该方法为get请求 */ @GET() Call<ResponseBody> executeGet(@Url String url); //@GET("{path}") //Call<ResponseBody> executeGet(@Path("path") String path, @QueryMap Map<String, String> datas); //如果上面这种写法或出现URL异常 // http://api.myapi.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist //@GET("{path}") //Call<ResponseBody> executeGet(@Path(value = "path", encoded = true) String path, @QueryMap Map<String, String> datas); @GET() Call<ResponseBody> executeGet(@Url String url, @QueryMap Map<String, String> datas); //@FormUrlEncoded//如果使用fileMap必须加上encoded注解 //@POST("{path}") //Call<ResponseBody> postMethod(@Path(value = "path", encoded = true) String path, @FieldMap Map<String, String> dates); @FormUrlEncoded//如果使用fileMap必须加上encoded注解 @POST() Call<ResponseBody> executePost(@Url String url, @FieldMap Map<String, String> dates);}
/** * 类描述: <br/> * 创建人:吴冬冬<br/> * 创建时间:2017/8/4 18:26 <br/> */public abstract class RetrofitCallback implements Callback { private ProgressDialog mProgressDialog; /** * 成功中也会可能有错误信息,如账号错误之类的 */ public abstract void onSuccess(String success); public abstract void onError(String error); public void addShowLoading(Context context, boolean isShowLoading, int isShowLoadingType){ if (isShowLoading) { if (isShowLoadingType == HttpManger.HTTP_MANGER_CIRCLE) {//无限循环 mProgressDialog = new ProgressDialog(context); mProgressDialog.setMessage(context.getString(R.string.net_loading)); } else { //其他类型加载框 } if (mProgressDialog != null) { mProgressDialog.show(); } } } @Override public void onResponse(Call call, Response response) { if (mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } if (response.isSuccessful()) { onSuccess(response.body().toString()); } } @Override public void onFailure(Call call, Throwable t) { if (mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } if (t != null && t.getMessage() != null) { onError(t.getMessage()); } }}
/** * 类描述:工具类 <br/> * 创建人:吴冬冬<br/> * 创建时间:2017/8/4 17:20 <br/> */public class Utils { public static <T> T checkNotNull(T object, String message) { if (object == null) { throw new NullPointerException(message); } return object; }}
阅读全文
0 0
- retrofit2.0 封装
- Retrofit2.0介绍使用封装
- Retrofit2.0使用详解&&封装
- Retrofit2 封装
- Android Studio Retrofit2.0简单封装
- retrofit2+rxjava2封装解析
- 简单封装retrofit2+rxjava2
- Rxjava2+okhttp3+Retrofit2封装
- Okhttp3+Rxjava+Retrofit2封装
- Android 网络框架 Retrofit2.0介绍、使用和封装
- retrofit2.0+okhttp3+rxjava的封装(简单好用)
- 基于Retrofit2.0 封装的超好用的RetrofitClient
- MVP实战心得(三)---封装Retrofit2.0+RxAndroid+RxBus
- Retrofit2.0-Java(Android) 的REST 接口封装类库
- android架构封装(mvp + rxandroid + Retrofit2.0 )
- Rxjava2+Retrofit2.0进行封装(总地址)
- MVP实战心得(三)---封装Retrofit2.0+RxAndroid+RxBus
- RxJava + Retrofit2.0的项目实战完美封装
- Python之机器学习01——决策树
- Laravel Excel导出xls乱码
- 深入理解JSP原理
- 编译警告...请使用 -Xlint:deprecation 重新编译 [或-Xlint:unchecked]
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- retrofit2.0 封装
- layer弹出的iframe层在执行完毕后关闭当前弹出层
- CPU-bound(计算密集型) 和I/O bound(I/O密集型)
- Web前端面试常见问题
- 关于红黑树插入过程的正确描述
- HTML页面跳转
- Spring MVC 基于注解的class文件打成jar包后注入失败
- 约数个数
- sqlzoo练习答案--SELECT within SELECT Tutorial