package com.example.lmj.simpleokhttpdemo;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Cache;
import okhttp3.CacheControl;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Cookie;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.BufferedSink;
/**
* Created by aus on 2016/11/23.
*/
public class OkHttpUtil {
//读超时长,单位:毫秒
public static final int READ_TIME_OUT = 7676;
//连接时长,单位:毫秒
public static final int CONNECT_TIME_OUT = 7676;
private static OkHttpUtil okHttpUtil;
private static OkHttpClient okHttpClient;
String cachedirectory = Environment.getExternalStorageDirectory() + "/lancoo/caches";
private static final long CACHE_STALE_SEC = 60 * 1;
private static final Interceptor mRewriteCacheControlInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String cacheControl = request.cacheControl().toString();
if (!NetWorkUtils.isNetConnected(BaseApplication.getAppContext())) {
request = request.newBuilder()
.cacheControl(TextUtils.isEmpty(cacheControl) ? CacheControl.FORCE_NETWORK : CacheControl.FORCE_CACHE)
.build();
}
Response originalResponse = chain.proceed(request);
if (NetWorkUtils.isNetConnected(BaseApplication.getAppContext())) {
//有网的时候读接口上的@Headers里的配置,你可以在这里进行统一的设置
return originalResponse.newBuilder()
.header("Cache-Control", cacheControl)
.removeHeader("Pragma")
.build();
} else {
return originalResponse.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=" + CACHE_STALE_SEC)
.removeHeader("Pragma")
.build();
}
}
};
private String sessionID = "";
private Interceptor receivedCookiesInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response originalResponse = chain.proceed(chain.request());
if (!originalResponse.headers("Set-Cookie").isEmpty()) {
HashSet<String> cookies = new HashSet<>();
for (String header : originalResponse.headers("Set-Cookie")) {
Log.i("aaa", "session:" + header);
sessionID = header;
cookies.add(header);
}
}
return originalResponse;
}
};
private Interceptor addCookiesInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
builder.addHeader("Cookie", sessionID);
return chain.proceed(builder.build());
}
};
private Cache cache;
private File cacheFile;
private OkHttpUtil() {
cacheFile = new File(BaseApplication.getAppContext().getCacheDir(), "cache");
cache = new Cache(cacheFile, 1024 * 1024 * 10); //10Mb
okHttpClient = new OkHttpClient.Builder()
.readTimeout(READ_TIME_OUT, TimeUnit.MILLISECONDS)
.connectTimeout(CONNECT_TIME_OUT, TimeUnit.MILLISECONDS)
.addInterceptor(addCookiesInterceptor)
.addInterceptor(receivedCookiesInterceptor)
.addInterceptor(mRewriteCacheControlInterceptor)
.addNetworkInterceptor(mRewriteCacheControlInterceptor)
.cache(cache)
.build();
}
public static OkHttpUtil getInstance() {
if (null == okHttpUtil) {
synchronized (OkHttpUtil.class) {
if (null == okHttpUtil) {
okHttpUtil = new OkHttpUtil();
}
}
}
return okHttpUtil;
}
public void doGet(String url) {
}
public Call doGetBackCall(String url, final Callback callback) {
Request request = new Request.Builder().url(url).build();
Callback Mycallback = new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callback.onFailure(call, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callback.onResponse(call, response);
}
};
Call call = okHttpClient.newCall(request);
call.enqueue(Mycallback);
return call;
}
public Call doGetBackCall(String url,int cacheTime , final Callback callback) {
Request request = new Request.Builder().url(url).addHeader("Cache-Control",cacheTime<1?"":"max-stale="+cacheTime).build();
Callback Mycallback = new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callback.onFailure(call, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callback.onResponse(call, response);
}
};
Call call = okHttpClient.newCall(request);
call.enqueue(Mycallback);
return call;
}
public Call doPostBackCall(HashMap<String, String> params, String url, Callback callback) {
FormBody.Builder formBodybuilder = new FormBody.Builder();
Iterator iter = params.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> entry = (Map.Entry<String, String>) iter.next();
String key = entry.getKey();
String val = entry.getValue();
formBodybuilder.add(key, val);
}
RequestBody requestBody = formBodybuilder.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
return call;
}
public Call doPostJsonBackCall(String jsonParam, String url, final Callback callback) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),jsonParam);
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = okHttpClient.newCall(request);
Callback Mycallback = new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callback.onFailure(call, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callback.onResponse(call, response);
}
};
call.enqueue(Mycallback);
return call;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
okhttp简单demo
共32个文件
xml:7个
java:6个
png:5个
需积分: 9 33 下载量 111 浏览量
2016-11-25
17:52:16
上传
评论
收藏 94KB RAR 举报
温馨提示
一个okhttp的简单例子,包括get,post,缓存,sesson保持
资源推荐
资源详情
资源评论
收起资源包目录
SimpleOkHttpDemo.rar (32个子文件)
SimpleOkHttpDemo
.gitignore 127B
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 233B
local.properties 437B
build.gradle 521B
gradlew.bat 2KB
gradlew 5KB
app
.gitignore 8B
build.gradle 958B
proguard-rules.pro 671B
app.iml 12KB
libs
src
test
java
com
example
lmj
simpleokhttpdemo
ExampleUnitTest.java 426B
main
AndroidManifest.xml 1010B
java
com
example
lmj
simpleokhttpdemo
NetWorkUtils.java 2KB
BaseApplication.java 426B
MainActivity.java 7KB
OkHttpUtil.java 8KB
res
values
styles.xml 394B
colors.xml 214B
strings.xml 82B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
layout
activity_main.xml 2KB
mipmap-xhdpi
ic_launcher.png 5KB
mipmap-hdpi
ic_launcher.png 3KB
drawable
mipmap-mdpi
ic_launcher.png 2KB
values-w820dp
dimens.xml 364B
mipmap-xxxhdpi
ic_launcher.png 10KB
androidTest
java
com
example
lmj
simpleokhttpdemo
ExampleInstrumentedTest.java 794B
build
.gradle
build
gradle.properties 747B
.idea
SimpleOkHttpDemo.iml 870B
settings.gradle 16B
共 32 条
- 1
资源评论
按劳分配
- 粉丝: 19
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功