OkHttp3的使用,代码奉上
2016-07-21 11:15
375 查看
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();
}
}
});