在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:MrZhousf/OkHttp3开源软件地址:https://github.com/MrZhousf/OkHttp3开源编程语言:Java 100.0%开源软件介绍:OkHttp3基于OkHttp3封装的网络请求库 功能点
相关截图网络请求演示先网络再缓存演示先缓存再网络演示上传图片界面断点下载文件界面日志
项目演示DEMO项目中已包含所有支持业务的demo,详情请下载项目参考源码。 引用方式Maven
Gradle
若项目已包含support-annotations或出现support-annotations版本冲突请采用下面方式进行依赖:
若项目已包含Gson或出现Gson版本冲突请采用下面方式进行依赖:
ProGuard如果你使用了ProGuard混淆,请添加如下配置:
SDK版本
提交记录
权限
自定义全局配置在Application中配置如下: String downloadFileDir = Environment.getExternalStorageDirectory().getPath()+"/okHttp_download/";
String cacheDir = Environment.getExternalStorageDirectory().getPath()+"/okHttp_cache";
OkHttpUtil.init(context)
.setConnectTimeout(15)//连接超时时间
.setWriteTimeout(15)//写超时时间
.setReadTimeout(15)//读超时时间
.setMaxCacheSize(10 * 1024 * 1024)//缓存空间大小
.setCacheType(CacheType.FORCE_NETWORK)//缓存类型
.setHttpLogTAG("HttpLog")//设置请求日志标识
.setIsGzip(false)//Gzip压缩,需要服务端支持
.setShowHttpLog(true)//显示请求日志
.setShowLifecycleLog(false)//显示Activity销毁日志
.setRetryOnConnectionFailure(false)//失败后不自动重连
.setCachedDir(new File(cacheDir))//设置缓存目录
.setDownloadFileDir(downloadFileDir)//文件下载保存目录
.setResponseEncoding(Encoding.UTF_8)//设置全局的服务器响应编码
.setRequestEncoding(Encoding.UTF_8)//设置全局的请求参数编码
.setHttpsCertificate("12306.cer")//设置全局Https证书
.addResultInterceptor(HttpInterceptor.ResultInterceptor)//请求结果拦截器
.addExceptionInterceptor(HttpInterceptor.ExceptionInterceptor)//请求链路异常拦截器
.setCookieJar(new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context)))//持久化cookie
.build();
获取网络请求客户端单例示例//获取单例客户端(默认)
方法一、OkHttpUtil.getDefault(this)//绑定生命周期
.doGetSync(HttpInfo.Builder().setUrl(url).build());
方法二、OkHttpUtil.getDefault()//不绑定生命周期
.doGetSync(HttpInfo.Builder().setUrl(url).build());
取消指定请求建议在视图中采用OkHttpUtil.getDefault(this)的方式进行请求绑定,该方式会在Activity/Fragment销毁时自动取消当前视图下的所有请求; 请求标识类型支持Object、String、Integer、Float、Double; 请求标识务必保证唯一。 //*******请求时先绑定请求标识,根据该标识进行取消*******/
//方法一:
OkHttpUtil.Builder()
.setReadTimeout(120)
.build("请求标识")//绑定请求标识
.doDownloadFileAsync(info);
//方法二:
OkHttpUtil.getDefault("请求标识")//绑定请求标识
.doGetSync(info);
//*******取消指定请求*******/
OkHttpUtil.getDefault().cancelRequest("请求标识");
HttpInfo参数解析:
HttpInfo.Builder()
.setUrl(url)
.setRequestType(RequestType.GET)//请求方式
.addHead("head","test")//添加头参数
.setContentType(ContentType.SOAP)//设置媒体类型
.addParam("param","test")//添加接口键值对参数
.addParams(new HashMap<String, String>())//添加接口键值对参数集合
.addParamBytes("byte")//添加二进制流
.addParamJson("json")//添加Json参数
.addParamFile(new File(""))//添加文档参数
.addParamForm("form")//添加表单参数
.addDownloadFile(new DownloadFileInfo("fileURL", "myMP4",null))//添加下载文件
.addUploadFile("interfaceParamName","filePathWithName",null)//添加上传文件
.setResponseEncoding(Encoding.UTF_8)//设置服务器响应编码
.setRequestEncoding(Encoding.UTF_8)//设置全局的请求参数编码
.setDelayExec(2, TimeUnit.SECONDS)//延迟2秒执行
.setHttpsCertificate("12306.cer")//设置Https证书
.setNeedResponse(true)//设置返回结果为Response
.build() 在Activity中同步调用示例 /**
* 同步请求:由于不能在UI线程中进行网络请求操作,所以采用子线程方式
*/
private void sync() {
new Thread(new Runnable() {
@Override
public void run() {
final HttpInfo info = HttpInfo.Builder()
.setUrl(url)
.setResponseEncoding(Encoding.UTF_8)//设置该接口的服务器响应编码
.setRequestEncoding(Encoding.UTF_8)//设置该接口的请求参数编码
.build();
OkHttpUtil.getDefault(this)
.doGetSync(info);
final String result = info.getRetDetail();
runOnUiThread(new Runnable() {
@Override
public void run() {
resultTV.setText("同步请求:" + result);
setFromCacheTV(info);
}
});
}
}).start();
} 在Activity中异步调用示例 /**
* 异步请求:回调方法可以直接操作UI
*/
private void async() {
OkHttpUtil.getDefault(this).doGetAsync(
HttpInfo.Builder().setUrl(url).build(),
new Callback() {
@Override
public void onFailure(HttpInfo info) throws IOException {
String result = info.getRetDetail();
resultTV.setText("异步请求失败:" + result);
}
@Override
public void onSuccess(HttpInfo info) throws IOException {
String result = info.getRetDetail();
resultTV.setText("异步请求成功:" + result);
//GSon解析
TimeAndDate time = info.getRetDetail(TimeAndDate.class);
LogUtil.d("MainActivity", time.getResult().toString());
setFromCacheTV(info);
}
});
} 仅网络请求 /**
* 仅网络请求
*/
private void forceNetwork(){
OkHttpUtil.Builder().setCacheType(CacheType.FORCE_NETWORK).build(this)
.doGetAsync(
HttpInfo.Builder().setUrl(url).build(),
new Callback() {
@Override
public void onSuccess(HttpInfo info) throws IOException {
String result = info.getRetDetail();
resultTV.setText("FORCE_NETWORK:" + result);
setFromCacheTV(info);
}
@Override
public void onFailure(HttpInfo info) throws IOException {
resultTV.setText("FORCE_NETWORK:" + info.getRetDetail());
}
}
);
} 仅缓存请求 /**
* 仅缓存请求
*/
private void forceCache(){
OkHttpUtil.Builder().setCacheType(CacheType.FORCE_CACHE).build(this)
.doGetAsync(
HttpInfo.Builder().setUrl(url).build(),
new Callback() {
@Override
public void onSuccess(HttpInfo info) throws IOException {
String result = info.getRetDetail();
resultTV.setText("FORCE_CACHE:" + result);
setFromCacheTV(info);
}
@Override
public void onFailure(HttpInfo info) throws IOException {
resultTV.setText("FORCE_CACHE:" + info.getRetDetail());
}
}
);
} 先网络再缓存 /**
* 先网络再缓存:先请求网络,失败则请求缓存
*/
private void networkThenCache() {
OkHttpUtil.Builder().setCacheType(CacheType.NETWORK_THEN_CACHE).build(this)
.doGetAsync(
HttpInfo.Builder().setUrl(url).build(),
new Callback() {
@Override
public void onSuccess(HttpInfo info) throws IOException {
String result = info.getRetDetail();
resultTV.setText("NETWORK_THEN_CACHE:" + result);
setFromCacheTV(info);
}
@Override
public void onFailure(HttpInfo info) throws IOException {
resultTV.setText("NETWORK_THEN_CACHE:" + info.getRetDetail());
}
}
);
} 先缓存再网络 /**
* 先缓存再网络:先请求缓存,失败则请求网络
*/
private void cacheThenNetwork() {
OkHttpUtil.Builder().setCacheType(CacheType.CACHE_THEN_NETWORK).build(this)
.doGetAsync(
HttpInfo.Builder().setUrl(url).build(),
new Callback() {
@Override
public void onSuccess(HttpInfo info) throws IOException {
String result = info.getRetDetail();
resultTV.setText("CACHE_THEN_NETWORK:" + result);
setFromCacheTV(info);
}
@Override
public void onFailure(HttpInfo info) throws IOException {
resultTV.setText("CACHE_THEN_NETWORK:" + info.getRetDetail());
}
}
);
} 缓存10秒失效全部评论
专题导读
上一篇:CNSRE/HttpDNSServer发布时间:2022-06-17下一篇:JuliaWeb/HttpServer.jl: DEPRECATED! Basic, non-blocking HTTP server in Julia.发布时间:2022-06-17热门推荐
热门话题
阅读排行榜
|
请发表评论