Retrofit简易封装
来源:互联网 发布:网络命令ping 编辑:程序博客网 时间:2024/06/08 11:38
Retrofit简易封装
简单期间,就用一个demo来展示:
build.gradle配置文件:
compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
初次使用 Retrofit 的可以直接复制,修改具体参数,即可使用.
Retrofit简易封装需要以下4个基本的类:
- RetrofitManager
- OkHttpClientManager
- NetApi
- UrlConfig
建议放置在config包中.
RetrofitManager类:
/** * @author lwj * @date 2017/12/15 */public class RetrofitManager { private static Retrofit.Builder sInstance; private static Retrofit.Builder getInstance() { if (sInstance == null) { synchronized (RetrofitManager.class) { if (sInstance == null) { sInstance = new Retrofit.Builder(); } } } return sInstance; } private static Retrofit getRetrofit(String url) { Retrofit retrofit = RetrofitManager.getInstance() // 经过处理的okHttpClient .client(OkHttpClientManager.getInstance().okHttpClient) // 添加转换工厂. .addConverterFactory(GsonConverterFactory.create()) // 添加回调适配器工厂 .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 至此: host+port===>baseUrl .baseUrl(url) .build(); return retrofit; } public static Retrofit getHost() { return RetrofitManager.getRetrofit(UrlConfig.HOST); }}
OkHttpClientManager类:
/** * @author lwj * @date 2017/12/15 */public class OkHttpClientManager { private static final String TAG = OkHttpClientManager.class.getName(); protected OkHttpClient okHttpClient; private OkHttpClientManager() { if (okHttpClient == null) { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); // NONE BASIC HEADERS BODY 四种方式. // 最后过了调试阶段,就把 BODY ----> NONE httpLoggingInterceptor.setLevel(BODY); OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder(); // 10s 连接超时 okHttpClientBuilder.connectTimeout(10, TimeUnit.SECONDS); // 5s 读取超时 okHttpClientBuilder.readTimeout(15, TimeUnit.SECONDS); okHttpClient = okHttpClientBuilder .addInterceptor(new RequestInterceptor()) .addInterceptor(new CustomInterceptor()) .addInterceptor(httpLoggingInterceptor) .build(); } } public static OkHttpClientManager getInstance() { return HelpHolder.INSTANCE; } private static class HelpHolder { private static final OkHttpClientManager INSTANCE = new OkHttpClientManager(); } /** * ********以下部分为自定义,而且这两个 Interceptor可以在一个当中写.*********************************** */ private class RequestInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); request.newBuilder() .header("Content-Type", "application/x-www-form-urlencoded") .method(request.method(), request.body()) .build(); return chain.proceed(request); } } /** * 自定义拦截器. */ private class CustomInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); HttpUrl url = request.url(); request.newBuilder().url(url).build(); return chain.proceed(request); } }}
NetApi类:
/** * @author lwj * @date 2017/12/15 */public class NetApi { public static HashMap<String, Object> buildBaseMap() { HashMap<String, Object> map = new HashMap<>(); // 在这里设置公共参数. return map; } public static HashMap<String, Object> buildGeoHashMap(double lat, double lng) { HashMap<String, Object> map = buildBaseMap(); map.put("lat", lat); map.put("lng", lng); return map; } /** * GEO_HASH * * @Body 获取网页 html 代码 * @QueryMap 获取 json 字符串. */ public interface OnJqueryBack { @GET(UrlConfig.GEO_HASH) Observable<Object> onGeoHash(@QueryMap HashMap<String, Object> fields); } public static OnJqueryBack getJqueryBack() { return RetrofitManager.getHost().create(OnJqueryBack.class); }}
UrlConfig类:
/** * @author lwj * @date 2017/12/15 */public class UrlConfig { /** * POST */ public static final String HOST = "http://pvmap.pvbao.net/"; public static final String GEO_HASH = "JqueryBack/GeoHash.ashx";}
最后,给出一个调用的参考:
/** * 请求 geoHash 接口 */private void invokeGeoHash(double lat, double lng) { HashMap<String, Object> map = NetApi.buildGeoHashMap(lat, lng); Observable<Object> observable = NetApi.getJqueryBack().onGeoHash(map); Subscription subscription = observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .filter(new Func1<Object, Boolean>() { @Override public Boolean call(Object o) { return true; } }) .subscribe(new Subscriber<Object>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { showToast(e.getMessage()); } @Override public void onNext(Object o) { // 数据回调 } }); mCompositeSubscription.add(subscription);}
最后关于几个需要注意的点:
mCompositeSubscription在BaseActivity中如下所示初始化
public class BaseActivity extends FragmentActivity { protected CompositeSubscription mCompositeSubscription = new CompositeSubscription(); @Override protected void onDestroy() { if (mCompositeSubscription != null && !mCompositeSubscription.isUnsubscribed()) { // 订阅 vs 解订阅. mCompositeSubscription.unsubscribe(); // 解掉 签署/订阅. } super.onDestroy(); }}
BaseFragment同理.
NetApi中Object常常替换为具体的返回类型,比如:CommonBean之类,而在调用时 onNext() 里就是 CommonBean.
Observable<CommonBean> onGeoHash(@QueryMap HashMap<String, Object> fields);
有问题可私信/评论.
阅读全文
0 0
- Retrofit简易封装
- Android网络开源库-Retrofit(五)简易封装
- Retrofit -> 封装
- Retrofit封装
- Retrofit封装
- Retrofit封装
- 封装Retrofit
- Retrofit的使用封装
- flux-retrofit-okhttp封装
- Retrofit项目封装使用
- Retrofit框架基本封装
- Retrofit+Rxjava的封装
- Retrofit+RxJava 完美封装
- Retrofit简单封装
- Retrofit封装和使用
- Retrofit的简单封装
- retrofit+RXjava二次封装
- Retrofit的简单封装
- SeekBar 实现网络获取图片随thumb滑动,,并位于中间位置
- 商品详情页面,点击按钮将对应的商品加入购物车
- Apache运行PHP原理
- 一个简单的倒计时控件的实现
- 态度决定高度
- Retrofit简易封装
- LR11:Web Tours登不上
- 使用git将项目上传到github(最简单方法)
- spring boot 使用属性加载顺序
- ipset详解
- Python 从入门到实践 8-9 课后习题
- Android | Android数据存储
- B. Months and Years(题解)
- 四大组件之一:Service详细介绍