分享一个okhttp请求帮助类
package com.xxx.net;
import android.os.AsyncTask;
import android.util.Log;
import com.xxx.util.LogcatHelper;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* Created by Administrator on 2016/9/22 0022.
*/
public class HttpHelp {
public static final MediaType FORM_CONTENT_TYPE
= MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
public static final MediaType FORM_CONTENT_TYPE_XML
= MediaType.parse("text/xml; charset=utf-8");
private static HttpHelp instance;
private static OkHttpClient client;
private ExecutorService executor;
public enum Type{
GET,POST
}
public interface CallBack{
void result(String result, boolean isSuccess);
}
public HttpHelp() {
client = new OkHttpClient();
executor = Executors.newCachedThreadPool();
}
public static HttpHelp getInstance() {
if (instance ==null){
instance = new HttpHelp();
}
return instance;
}
public void requestGet(final String url, final CallBack callBack){
new MyAsyncTask(url,callBack).executeOnExecutor(executor);
}
public void requestPost(final String url, Map<String,String> formParams,final CallBack callBack){
new MyAsyncTask(url,formParams,callBack).executeOnExecutor(executor);
}
public void requestPost(final String url, Map<String,String> params,boolean isParamXml,final CallBack callBack){
new MyAsyncTask(url,params,callBack,isParamXml).executeOnExecutor(executor);
}
public class MyAsyncTask extends AsyncTask<Void,Void,String>{
private String url;
private Map<String,String> formParams;
private Type type = Type.GET;
private CallBack mCallBack;
private boolean isParamXml;//传入参数是否是xml标签格式
/**
* get请求
* @param url 请求地址
* @param callBack 结果回调
*/
public MyAsyncTask( String url,CallBack callBack) {
this.url = url;
this.type = Type.GET;
this.mCallBack = callBack;
}
/**
* post请求
* @param url 请求地址
* @param formParams 表单参数
* @param callBack 结果回调
*/
public MyAsyncTask( String url, Map<String,String> formParams,CallBack callBack) {
this.url = url;
this.formParams = formParams;
this.type = Type.POST;
this.mCallBack = callBack;
}
/**
* post请求(isParamXml传true,用于xml格式)
* @param url 请求地址
* @param formParams 表单参数
* @param callBack 结果回调
*/
public MyAsyncTask( String url, Map<String,String> formParams,CallBack callBack,boolean isParamXml) {
this.url = url;
this.formParams = formParams;
this.type = Type.POST;
this.mCallBack = callBack;
this.isParamXml = isParamXml;
}
@Override
protected String doInBackground(Void... params) {
String result = null;
Request request = null;
try {
if(type ==Type.GET){
request = new Request.Builder()
.url(url)
.build();
}else if(type ==Type.POST){
StringBuffer sb = new StringBuffer();
RequestBody body;
if(isParamXml){
//设置xml格式参数
sb.append("<xml>");
for (String key: formParams.keySet()) {
sb.append("<"+key+">"+formParams.get(key)+"</"+key+">");
}
sb.append("</xml>");
Log.i("TAG", ""+sb.toString());
body = RequestBody.create(FORM_CONTENT_TYPE_XML, sb.toString());
}else{
//设置表单参数
// FormBody.Builder builder = new FormBody.Builder();
for (String key: formParams.keySet()) {
// builder.add(key,formParams.get(key));
sb.append(key+"="+formParams.get(key)+"&");
}
Log.i("TAG", ""+sb.toString());
body = RequestBody.create(FORM_CONTENT_TYPE, sb.toString());
}
//创建请求
request = new Request.Builder()
.url(url)
// .post(builder.build())
.post(body)
.build();
}
//发送请求
Response response = client.newCall(request).execute();
result = response.body().string().toString();
LogcatHelper.showLogCompletion("result: "+result,500);
} catch (IOException e) {
e.printStackTrace();
}catch (NullPointerException e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result ==null){
mCallBack.result(null,false);
}else{
mCallBack.result(result,true);
}
}
}
}