OkHttpUtils类
//定义静态变量
private static volatile OkHttpUtils instance=null;
private final OkHttpClient okHttpClient;
private Handler handler=new Handler();
//定义构造方法
private OkHttpUtils()
{
//拦截器
okHttpClient = new OkHttpClient().newBuilder()
.addInterceptor(new Logger())
.build();
}
//定义静态的方法创建这个类
public static OkHttpUtils getInstance(){
if(null==instance){
synchronized (OkHttpUtils.class){
if (instance==null){
instance=new OkHttpUtils();
}
}
}
return instance;
}
//定义get的请求方式
public void doGet(String url, HashMap map, final CallBack callBack){
StringBuilder sb=null;
if (map.size() == 0) {
if (null == sb) {
sb = new StringBuilder();
sb.append(url);
}
}else{
for(String key:map.keySet()){
if(sb==null){
sb=new StringBuilder();
sb.append("?");
}else{
sb.append("&");
}
sb.append(key).append("=").append(map.get(key));
}
}
Request request=new Request.Builder()
.url(url+sb.toString())
.get()
.build();
Call call = okHttpClient.newCall(request);
//异步请求数据
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.onFailure(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String str = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(str);
}
});
}
});
}
//定义post的请求方式
public void doPost(String url, HashMap map, final CallBack callBack){
//构建请求参数
FormBody.Builder bodyBuilder = new FormBody.Builder();
for (String key : map.keySet()) {
bodyBuilder.add(key,map.get(key));
}
FormBody body = bodyBuilder.build();
Request request=new Request.Builder()
.url(url)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.onFailure(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String str = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(str);
}
});
}
});
}
拦截器:Logger类
public class Logger implements Interceptor {
private Request request;
private Request original;
@Override
public Response intercept(Chain chain) throws IOException {
original = chain.request();
//取出原始数据
HttpUrl url=original.url().newBuilder()
.addQueryParameter("source","android")
.build();
//添加请求头
request = original.newBuilder()
.url(url)
.build();
return chain.proceed(request);
}
}
//定义接口
public interface CallBack {
void onSuccess(Object o);
void onFailure(String msg);
}
//创建一个Gson类
public class GsonUtils {
private static Gson gson;
public static Gson getInstance(){
if (null==gson){
gson=new Gson();
}
return gson;
}
}
p层里加入的
//防止内存泄漏
public void detatch(){
if (dView != null) {
dView = null;
}
}
v层里,重写ondestory方法
//防止内存泄漏
@Override
protected void onDestroy() {
super.onDestroy();
if (detailPresenter != null) {
detailPresenter.detatch();
}
}