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

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();
}
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息