您的位置:首页 > 理论基础 > 计算机网络

电商项目---Okhttp网络请求及单列模式

2018-01-19 10:46 253 查看
HttpConfig接口
package com.xinzhengwei.mygouwuche.okhttp;

/**
* Created by 辛政维 on 2018/1/13.
*/

public class HttpConfig {

public static String data_url="https://www.zhaoapi.cn/product/getProductDetail";
public static String add_url="https://www.zhaoapi.cn/product/addCart";
public static String cha_url="https://www.zhaoapi.cn/product/getCarts";

}
 
OkHttoUtil工具类
package com.xinzhengwei.mygouwuche.okhttp;

import android.os.Handler;
import android.os.Message;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
* Created by 辛政维 on 2018/1/13.
*/

public class OkHttoUtil {

public static OkHttoUtil okHttoUtil=null;
private OkLoadListener okLoadListener;
private MyHandler myHandler=new MyHandler();

public static OkHttoUtil getInstance(){

if (okHttoUtil==null){
okHttoUtil = new OkHttoUtil();
}

return okHttoUtil;
}

public void okHttpGet(String url){

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyInterceptor()).build();
Request build = new Request.Builder().url(url).build();
Call call = client.newCall(build);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what=0;
message.obj=e.getMessage();
myHandler.sendMessage(message);
}

@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what=1;
message.obj=response.body().string();
myHandler.sendMessage(message);
}
});

}

public void okPost(String url, Map<String,String> map){
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyInterceptor()).build();
FormBody.Builder builder = new FormBody.Builder();
Set<String> keySet = map.keySet();
for (String key:keySet) {
String values = map.get(key);
builder.add(key,values+"");
}
FormBody build = builder.build();
Request request = new Request.Builder().url(url).post(build).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what=0;
message.obj=e.getMessage();
myHandler.sendMessage(message);
}

@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what=1;
message.obj=response.body().string();
myHandler.sendMessage(message);
}
});
}

class MyInterceptor implements Interceptor {

@Override
public Response intercept(Chain chain) throws IOException {

Request request = chain.request();
RequestBody body = request.body();
if (body instanceof FormBody){
FormBody.Builder builder = new FormBody.Builder();
for (int i = 0; i <((FormBody) body).size() ; i++) {
String name = ((FormBody) body).name(i);
String value = ((FormBody) body).value(i);

//放入新的
builder.add(name, value);

}
builder.add("source", "android");
FormBody newBody = builder.build();
//创建新的请求
Request newRequest = request.newBuilder().post(newBody).build();
Response response = chain.proceed(newRequest);
return response;
}

return null;
}
}

public void setOkLoadListener(OkLoadListener okLoadListener){
this.okLoadListener=okLoadListener;
}

class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
String error = (String) msg.obj;
okLoadListener.loadError(error);
break;
case 1:
String json = (String) msg.obj;
okLoadListener.loadSuccess(json);
break;
}
}
}

}

OkLoadListener接口
package com.xinzhengwei.mygouwuche.okhttp;

/**
* Created by 辛政维 on 2018/1/17.
*/

public interface OkLoadListener {

void loadSuccess(String json);
void loadError(String error);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: