分享一個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);
}
}
}
}