概述

   在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) {
@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框架封装的开发框架的更多相关文章

  1. 上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二)

    上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二) 前几篇博文中给大家介绍了一下APP中的基本业务及开发本项目使用的网络架构: 上门洗车APP --- Androidc ...

  2. Android开发常用开源框架:图片处理

    https://blog.csdn.net/SGQ_CSDN/article/details/79910709 Android开发常用开源框架:图片处理 框架名称 功能描述 Android Unive ...

  3. Android开发之开源框架OKHTTP的Get请求代码,得到json字符串方法

      <span style="white-space:pre"> </span><pre name="code" class=&q ...

  4. Android开发之使用Handler封装下载图片工具类(源码分享)

    假设每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时能够调用. (1)在清单文件加入权限 <us ...

  5. openresty 前端开发轻量级MVC框架封装一(控制器篇)

    通过前面几章,我们已经掌握了一些基本的开发知识,但是代码结构比较简单,缺乏统一的标准,模块化,也缺乏统一的异常处理,这一章我们主要来学习如何封装一个轻量级的MVC框架,规范以及简化开发,并且提供类似p ...

  6. openresty 前端开发轻量级MVC框架封装二(渲染篇)

    这一章主要介绍怎么使用模板,进行后端渲染,主要用到了lua-resty-template这个库,直接下载下来,放到lualib里面就行了,推荐第三方库,已经框架都放到lualib目录里面,lua目录放 ...

  7. Android开发利用Volley框架下载和缓存网络图片

    2013年Google I/O大会上推出了一种新的网络通信框架——Volley,Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可 ...

  8. android开发学习——Mina框架

    Apache Mina Server 是一个网络通信应用框架,对socket进行了封装. http://www.cnblogs.com/moonandstar08/p/5475766.html htt ...

  9. NO.4 Android开发中常用框架及工具

    android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新ListView.ViewPager.WevView.ExpandableListView.GridView ...

随机推荐

  1. Oracle 创建主键自增表

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍在oracle中如果创建自增长表,这里要用到序列. create ...

  2. Oracle基础表空间建立,以及练习

    Oracle的表空间创建,可以采用网页的https://127.0.0.1:1158/em来进入oracle的页面进行创建表空间. 利用plsqldev.exe程序在表空间里添加数据: 首先要在use ...

  3. paramiko操作详解(封装好的类,可以直接使用)

    #!/usr/bin/env python #encoding:utf8 #author: djoker import paramiko class myParamiko: def __init__( ...

  4. paip.注册java程序为LINUX系统服务的总结。

    paip.注册java程序为LINUX系统服务的总结. ////////////////实现开机启动. 标准方法是按照/etc/init.d/下面的文件,修改一下:然后chkconfig xxx on ...

  5. 更新日志 - fir.im 新版管理后台邀请内测

    上周,我们对fir.im 新版管理后台的页面结构和样式进行了优化,现在新版的管理后台开始邀请内测,感兴趣的伙伴可以发邮件到 **beta@fir.im** 申请.为了保证服务质量和对问题进行有效追踪, ...

  6. jQuery实现Checkbox中项目开发全选全不选的使用

    <html> <head> <meta charset="utf-8"> <title>Checkbox的练习</title& ...

  7. Jquery对文本框的值、字符串的验证;正则表达式字符串的验证

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Leetcode 257 Binary Tree Paths 二叉树 DFS

    找到所有根到叶子的路径 深度优先搜索(DFS), 即二叉树的先序遍历. /** * Definition for a binary tree node. * struct TreeNode { * i ...

  9. 19数据表的创建-普通表&临时表-天轰穿大话数据库视频教程

    关键字:数据表 数据库性能 临时表 天轰穿 sqlserver 数据库大纲:数据表的特点,数据表的类型及用法,SQL创建数据表,创建临时表,全局临时表 优酷超清地址 腾讯超清地址 原文地址:http: ...

  10. 转:XBMC源代码分析

    1:整体结构以及编译方法 XBMC(全称是XBOX Media Center)是一个开源的媒体中心软件.XBMC最初为Xbox而开发,可以运行在Linux.OSX.Windows.Android4.0 ...