android 开发 - 使用okhttp框架封装的开发框架
2017-02-09 14:58
369 查看
概述
在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装。我使用Builder设计模式进行了封装形成oknet开源库。
介绍
oknet是一套基于okhttp的android网络http框架,封装了请求参数处理,日志打印。
Github地址
https://github.com/vir56k/oknet
特性
1.简洁的语法 2.支持自定义处理 message code 不等于0 的情形 3.支持文件上传 4.完整清晰的log日志输出 5.支持 公共参数 的配置 6.支持每个http请求的 日志 记录 7.支持 默认异常 的处理 8.支持 移除文件下载(通过FileDownloader)
适用场景
和服务端产生约定:响应的json格式一定为:{code:0, msg:"", body:""} 1.服务端 响应成功 则返回对应的json 2.code=0表示成功,body里如正确响应json. 3.code非零表示失败,msg表示失败的文本。 4.body 节点里放置你的自定义json数据
引用
在你的项目的根目录下的 build.gradle 文件中添加引用compile 'zhangyf.vir56k:oknet:0.0.1'
示例:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'zhangyf.vir56k:oknet:0.0.1'}
在系统启动时进行一些配置
比如在你的继承自Application的子类中,或者主Activity启动时配置。//配置okhttp 缓存位置 OknetConfig.setExternalCacheDir(getExternalCacheDir()); //OknetConfig.setRequestParaInterceptor(new CustomRequestParaInterceptor1()); OknetConfig.setRequestParaInterceptor(new CustomRequestParaInterceptor_jlb_app()); OknetConfig.setDefaultExceptionHandler(new CustomDefalutExceptionHandler()); OknetConfig.setLogInterceptor(new LogInterceptor() { @Override public void onLog(String tag, String msg) { //Log.i("日志拦截器拦截到 tag =" + tag, " msg = " + msg); } });
post简单请求,和String类型的响应
RequestBuilder.with(getActivity()).URL(Apis.GAEA_URLS.CAB_ADVERT_LIST). onSuccess(new CommonCallback<String>(String.class) { @Override public void onSuccess(String result, CommonMessage responseMessage, String responseString) { Log.i(TAG, "==成功:" + result); alert("==成功"); } }).excute();
带参数的请求,和 Json序列化的回调
Type t = new TypeToken<List<Demo2Cell>>() { }.getType(); RequestBuilder.with(getActivity()) .URL(Apis.Cab_Urls.GET_BOX_FREE_NEWS) .para("cabinet_code", "1412345678") .onSuccess(new CommonCallback<List<Demo2Cell>>(t) { @Override public void onSuccess(List<Demo2Cell> result, CommonMessage responseMessage, String responseString) { Log.i(TAG, "!!! 成功:" + result.get(0)); alert("!!成功" + result.get(0)); } }) .excute();
自定义处理异常代码(服务返回的消息里的
message code 不等于0) 的情形
RequestBuilder.with(getActivity()) .URL(Apis.GAEA_URLS.CAB_ADVERT_LIST) .onSuccess(new CommonCallback<String>(String.class) { b598 @Override public void onSuccess(String result, CommonMessage responseMessage, String responseString) { Log.i(TAG, "==成功:" + result); alert("==成功"); } @Override public boolean onFailure(int httpCode, Exception ex, CommonMessage responseMessage, String responseString) { if (ex instanceof NoZeroException) { NoZeroException noZeroException = (NoZeroException) ex; int code = noZeroException.getCode(); Log.i(TAG, "!!!!!!!!失败:" + noZeroException); alert("!!!!!!!!!!!!!!!!失败," + noZeroException); //return false;//如果不需要 默认异常处理器再次处理,这里可以返回true } return super.onFailure(httpCode, ex, responseMessage, responseString); } }) .excute();
上传文件
File f = new File(Environment.getExternalStorageDirectory().getPath(), "ImageCache/CloseIcon.png"); if (!f.exists()) throw new RuntimeException("not found ImageCache/CloseIcon.png"); RequestBuilder.with(getActivity()) .URL("http://10.0.1.232:8888/uc/suser/upload_avatar") .para("uid", "100202") .para("sid", "50e2904ca493d5d25475e4e080858925") /************************ 威力仅仅在这一行,其他都一样 ***************************/ .file("file", f) /************************ 威力仅仅在这一行,其他都一样 ***************************/ .onSuccess(new CommonCallback<Demo3Bean>(Demo3Bean.class) { @Override public void onSuccess(Demo3Bean result, CommonMessage responseMessage, String responseString) { Log.i(TAG, "!!! 成功:" + result.count); alert("!!成功" + result.count); } }) .excute();
处理需要显示进度条的情形
RequestBuilder.with(getActivity()) .URL(Apis.GAEA_URLS.CAB_NOTICE_LIST) .para("cabinet_code", "1412345678") /******** 没错,你没有看错,仅仅 下面 一行,进度条就闪亮登场 ************/ .progress(new DialogProgressIndicator(getActivity())) /******** 没错,你没有看错,仅仅 上面 一行,进度条就闪亮登场 ************/ .onSuccess(new CommonCallback<Demo3Bean>(Demo3Bean.class) { @Override public void onSuccess(Demo3Bean result, CommonMessage responseMessage, String responseString) { Log.i(TAG, "!!! 成功:" + result.count); alert("!!成功" + result.count); } }) .excute();
同步的方式发送http请求
private void demo_syncExcuete() { new AsyncTask<Void, Void, Void>() { boolean isok; String mResult1; @Override protected Void doInBackground(Void... params) { RequestBuilder.with(getActivity()) .URL(Apis.GAEA_URLS.CAB_ADVERT_LIST) .para("cabinet_code", "1412345678") .onSuccess(new CommonCallback<String>(String.class) { @Override public void onSuccess(String result, CommonMessage responseMessage, String responseString) { isok = true; mResult1 = result; } @Override public boolean onFailure(int httpCode, Exception exception, CommonMessage responseMessage, String allResponseString) { isok = false; return super.onFailure(httpCode, exception, responseMessage, allResponseString); } }) .syncExcute(); return null; } @Override protected void onPostExecute(Void aVoid) { if (isok) { Log.i(TAG, "==成功:" + mResult1); alert("==成功"); } } }.execute(); }
下载文件
public static void downloadFileDemo() { String url = "http://d.hiphotos.baidu.com/zhidao/pic/item/08f790529822720e67a9065978cb0a46f21fab2a.jpg"; File dest = new File(Environment.getExternalStorageDirectory(), "6f21fab2a.jpg"); FileDownloader.downloadFile(url, dest, new FileDownloader.DownloadFileProgressListener2() { @Override public void onFailure(Call call, IOException e) { System.out.println("Err: " + e.getMessage()); } @Override public void onProgress(long bytesRead, long contentLength, boolean done) { System.out.println(String.format("文件下载进度, read %s/%s", bytesRead, contentLength)); } @Override protected void onSuccess(Call call, File file) { System.out.println("文件下载成功吗 =" + file.exists()); } }); }
相关文章推荐
- android 开发 - 使用okhttp框架封装的开发框架
- 熟悉android开发框架,关于Okhttp3的使用
- Android—App—必备开发组件—调试工具篇—Stetho[配合OkHttp框架使用]
- [转载: Android开发666]okhttp的封装及使用
- 优雅设计封装基于Okhttp3的网络框架(五):多线程、单例模式优化 及 volatile、构建者模式使用解析
- Android 使用动态加载框架DL进行插件化开发
- Android开发初级00_1如何在安卓开发中使用数据库之量框架LitePal
- 使用编译时注解annotationProcessor(取代android-apt)开发组件化路由框架
- Android 音视频开发(五):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件
- Android开发之缓冲dialog对话框创建、使用与封装操作
- Android和h5混合开发框架:CordovaPlugin插件使用说明
- Android开发,ZxMvp框架的引入及使用详解(上)
- Android开发,ZxMvp框架的引入及使用详解(中)
- Android开发,ZxMvp框架的引入及使用详解(下)
- Android网络请求框架使用 -- OkHttp
- Android使用OKHTTP网络框架请求数据,RecyclerView结合Glide展示图片,瀑布流布局样式
- Android第三方框架 Universal-Image-Loader的使用,进一步封装
- okhttputils【 Android 一个改善的okHttp封装库】使用(一)
- okhttputils【 Android 一个改善的okHttp封装库】使用(二)
- 项目中okhttp网络框架的封装使用