赞
踩
compile 'com.squareup.okhttp3:okhttp:3.8.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.1'
public class LoggingInterceptor implements Interceptor {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
//这个chain里面包含了request和response,所以你要什么都可以从这里拿
Request request = chain.request();
long requestTime = System.nanoTime();//请求发起的时间
log(String.format("发送请求 %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long responeseTime = System.nanoTime();//收到响应的时间
//这里不能直接使用response.body().string()的方式输出日志
//因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一
//个新的response给应用层处理
ResponseBody responseBody = response.peekBody(1024 * 1024);
log(String.format("接收响应: [%s] %n返回json:【%s】 %.1fms%n%s",
response.request().url(),
responseBody.string(),
(responeseTime - requestTime) / 1e6d,
response.headers()));
return response;
}
public void log(String str){
if (isLog)
Log.d("meee",getClass()+":\n"+str);
}
public boolean isLog=false;
}
public class NetUtils {
//拦截日志
private static LoggingInterceptor logInterceptor = new LoggingInterceptor();
//单例模式,因为内部封装了很多信息例如session,所以最好使用单例模式
private static final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(logInterceptor)
.build();
private static Handler mHandler = new Handler(Looper.getMainLooper());
public static void get(String url, HashMap<String, String> map, final OnNet getter) {
final String urls = getUrl(url, map);
new Thread(new Runnable() {
@Override
public void run() {
//请求
Request request = new Request.Builder().url(urls).build();
//响应
Response response = null;
try {
response = client.newCall(request).execute();
//调用response.isSuccessful()判断是否成功
if (response.isSuccessful()) {
//response.body()有很多方法,可以把数据流转换成各种格式
getter.onSuccessed(response.body().string());
} else {
getter.onFailed(response.body().string());
}
} catch (IOException e) {
getter.onFailed(e.getCause() + "");
}
}
}).start();
}
public static void post(final String url, final HashMap<String, String> map, final OnNet callback) {
if (!(map == null || map.size() == 0)) {
//使用new FormBody.Builder()来传入请求参数
FormBody.Builder builder = new FormBody.Builder();
for (String key : map.keySet()) {
String value = map.get(key);
builder.add(key, value);
}
FormBody body = builder.build();
//将body传入请求中
Request request = new Request.Builder().url(url).post(body).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onFailed("请求失败:" + e.getMessage());
}
});
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
final String string = response.body().string();
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onSuccessed(string);
}
});
}
});
}
}
/**
* 选择是否打印okhttp请求的信息
* @param flag
*/
public static void setLogFlag(boolean flag){
logInterceptor.isLog=flag;
}
//将map参数拼接成get所使用的url
public static String getUrl(String url, HashMap map) {
if (map == null || map.size() == 0) {
return url;
}
StringBuilder sb = new StringBuilder();
sb.append(url);
sb.append("?");
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
sb.append(key);
sb.append("=");
sb.append(value);
sb.append("&");
}
url = sb.substring(0, sb.length() - 1);
return url;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。