# danke-http-android **Repository Path**: DanKeGongYu/danke-http-android ## Basic Information - **Project Name**: danke-http-android - **Description**: 基于okhttp + retrofit + rxjava的网络库封装 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-06 - **Last Updated**: 2021-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # danke-http-android ## 项目介绍 基于okhttp + retrofit的网络请求和缓存封装 ## 使用说明 1. 在 build.gradle 中添加依赖 ``` dependencies { implementation "com.dankegongyu.android:http:1.0.5" } ``` 2. 全局配置 ``` public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); initDKHttp(); } private void initDKHttp() { DKHttp.getInstance() .debug(BuildConfig.DEBUG) .setConnectTimeout(10000) // 设置默认连接超时时间,单位ms .setReadTimeout(10000) // 默认读操作超时时间 .setWriteTimeout(10000) // 默认写操作超时时间 .addNetworkInterceptor(new CacheInterceptor()) // 设置缓存拦截器 .setCache(new File(getExternalCacheDir(), "http"), 10 * 1024 * 1024) .addInterceptor(new ParamInterceptor()) // 设置请求拦截器 .addInterceptor(new ParseInterceptor()) // 设置解析拦截器 ... } ``` 3. 请求数据 ##### GET请求 ``` // 获取原始json数据 DKHttp.get("http://172.16.31.54:8080/api/v3/base-configure/configure") .param("city_id", "1") // 添加参数 .execute() // 无参返回原始json数据 .subscribeOn(Schedulers.io()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String s) { LogUtils.e(GET + s); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); ``` ``` // 对象 DKHttp.get("http://172.16.31.54:8080/api/v3/base-configure/configure") .param("city_id", "1") .execute(ConfigBean.class) // 解析为对象 .subscribeOn(Schedulers.io()) .subscribe(new DKObserver() { // 自定义Observer @Override public void onNext(ConfigBean configBean) { } }); ``` ``` // 数组 DKHttp.get("http://172.16.31.54:8080/api/v2/base-configure/city-list") .execute(new TypeToken>() {}) // 解析为数组 .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(List list) { LogUtils.e(GET + list); } @Override public void onError(Throwable e) { // LogUtils.e(GET + e); } @Override public void onComplete() { } }); ``` ##### POST请求 ``` DKHttp.post("http://172.16.31.54:8080/api/v1/device/register") .body(new DeviceRegisterReq()) // body参数 .addInterceptor(new DeviceRegisterInterceptor()) // 在默认拦截器基础上添加新的拦截器 .execute(DeviceRegisterRsp.class) .subscribeOn(Schedulers.io()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(DeviceRegisterRsp deviceRegisterRsp) { LogUtils.e(POST + deviceRegisterRsp.toString()); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); ``` ##### PUT请求 ``` DKHttp.put("http://172.16.31.54:8080/api/v2/collect/room") .setConnectTimeout(20000) // 设置该请求的超时时间 .setReadTimeout(20000) .setWriteTimeout(20000) .body(new FavoriteRoomReq("1875513774")) .execute(FavoriteRoomRsp.class) .subscribeOn(Schedulers.io()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(FavoriteRoomRsp favoriteRoomRsp) { LogUtils.e(PUT + favoriteRoomRsp.toString()); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); ``` ##### DELETE请求 ``` // 项目中暂时木有用到DELETE ``` ##### flatMap ``` DKHttp.post(Api.OAUTH_LOGIN) .body(new OauthAccessTokenBody("13000049962", "1111")) .execute(TokenBean.class) .subscribeOn(Schedulers.io()) .doOnNext(new Consumer() { @Override public void accept(TokenBean tokenBean) throws Exception { LogUtils.e(POST + tokenBean); } }) .flatMap(new Function>() { @Override public Observable apply(@NonNull TokenBean tokenBean) throws Exception { // 登录成功拿到token接着调用获取用户信息接口 return DKHttp.get(Api.USER_INFO).execute(UserBean.class); } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new DKObserver() { @Override public void onNext(@NonNull UserBean userBean) { LogUtils.e(GET + userBean); } @Override protected void onError(@NonNull HttpError httpError) { super.onError(httpError); } }); ``` ## 感谢 [RxEasyHttp](https://github.com/zhou-you/RxEasyHttp)