public class OkHttpUtil {
private Context context;
public static String Seisson;
public static OkHttpClient mOkHttpClient;
public OkHttpUtil (Context mcontext) {
Intent intent=new Intent(mcontext,BaiduLocation.class);
mcontext.startService(intent);
this.context=mcontext;
mOkHttpClient=builder.connectTimeout(60, TimeUnit.SECONDS).cookieJar(new CookiesManager()).build();
}
private static final okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder();
/**
* 该不会开启异步线程。
* @param request
* @return
* @throws IOException
*/
public static Response execute(Request request) throws IOException{
return mOkHttpClient.newCall(request).execute();
}
/**
* 开启异步线程访问网络
* @param request
* @param responseCallback
*/
public static void enqueue(String url,Map<String, String> maps, Callback responseCallback){
mOkHttpClient.newCall(getPraRequest(url, maps)).enqueue(responseCallback);
}
public static void enqueueFile(String url,File file, Callback responseCallback){
mOkHttpClient.newCall(getFileRequest(url, file)).enqueue(responseCallback);
}
public static void downPic(String url ,Callback responseCallback){
mOkHttpClient.newCall(getPraRequest(url, null)).enqueue(responseCallback);
}
/**
* 开启异步线程访问网络, 且不在意返回结果(实现空callback)
* @param request
*/
public static void enqueue(Request request){
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call arg0, Response arg1) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void onFailure(Call arg0, IOException arg1) {
// TODO Auto-generated method stub
}
});
}
public static String getStringFromServer(String url) throws IOException{
Request request = new Request.Builder().url(url).build();
Response response = execute(request);
if (response.isSuccessful()) {
String responseUrl = response.body().string();
return responseUrl;
} else {
throw new IOException("Unexpected code " + response);
}
}
private static final String CHARSET_NAME = "UTF-8";
/**
* 这里使用了HttpClinet的API。只是为了方便
* @param params
* @return
*/
public static String formatParams(List<BasicNameValuePair> params){
return URLEncodedUtils.format(params, CHARSET_NAME);
}
/**
* 为HttpGet 的 url 方便的添加多个name value 参数。
* @param url
* @param params
* @return
*/
public static String attachHttpGetParams(String url, List<BasicNameValuePair> params){
return url + "?" + formatParams(params);
}
/**
* 为HttpGet 的 url 方便的添加1个name value 参数。
* @param url
* @param name
* @param value
* @return
*/
public static String attachHttpGetParam(String url, String name, String value){
return url + "?" + name + "=" + value;
}
public static RequestBody getRequestBody(Map<String, String> maps){
Builder builder= new FormBody.Builder().add("DeviceType", "ANDROID").add("SystemVersion", "1.0");
for (String key : maps.keySet()) {
builder.add(key, maps.get(key));
}
return builder.build();
}
private static Request getPraRequest(String url,Map<String, String> maps){
Builder builder= new FormBody.Builder().add("DeviceType", "ANDROID").add("SystemVersion", "1.0");
if(maps!=null){
for (String key : maps.keySet()) {
builder.add(key, maps.get(key));
}
}
return new Request.Builder().url(url).post(builder.build()).build();
}
public static Request getRequest(String url,Map<String, String> maps){
Builder builder= new FormBody.Builder().add("DeviceType", "ANDROID").add("SystemVersion", "1.0");
for (String key : maps.keySet()) {
builder.add(key, maps.get(key));
}
return new Request.Builder().url(url).post(builder.build()).build();
}
public static Request getFileRequest(String url,File file){
// RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
MultipartBody.Builder builder= new MultipartBody.Builder().setType(MultipartBody.FORM);
// builder.addFormDataPart("file", null,RequestBody.create(MediaType.parse("image/png"),file));
/* Builder builder= new FormBody.Builder().add("DeviceType", "ANDROID").add("SystemVersion", "1.0");
builder.addFormDataPart*/
/* .addFormDataPart("hello", "android")
.addFormDataPart("photo", file.getName(), RequestBody.create(null, file))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"another\";filename=\"another.dex\""), RequestBody.create(MediaType.parse("application/octet-stream"), file))
.build();*/
// MultipartBody body= new MultipartBody.Builder().addFormDataPart("file", file.getName(), requestBody).build();
MultipartBody body= builder.addPart( Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\"file.jpg\""), RequestBody.create(MediaType.parse("image/png"),file)).build();
// RequestBody body= new MultipartBody.Builder().addFormDataPart(MediaType.parse( file.getName(), requestBody).build();
return new Request.Builder().url(url).post(body).build();
}
private class CookiesManager implements CookieJar {
private final PersistentCookieStore cookieStore = new PersistentCookieStore(context);
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
if (cookies != null && cookies.size() > 0) {
for (Cookie item : cookies) {
cookieStore.add(url, item);
}
}
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url);
return cookies;
}
}
}
使用说明:
OkHttpUtil okHttpUtil=new OkHttpUtil(getApplicationContext()); //初始化 工作类
使用:
Map<String, String> maps=new HashMap<String, String>();
maps.put("id", id);
OkHttpUtil.enqueue(IPUtil.deleteCart, maps, new JSONCallback(MyShopCartActivity.this){
@Override
public void onSuccess(JSONObject json) throws IOException {
// TODO Auto-generated method stub
super.onSuccess(json);
try {
if("true".equals(json.getString("success"))){
mHandler.sendEmptyMessage(2);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});