请求参数封装
import com.example.api.HttpClient;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* Created by chun on 2016/6/22.
*/
public class BaseNetParams {
public BaseNetParams() {
}
public BaseNetParams(String httpUrl, String method) {
this.httpUrl = httpUrl;
this.method = method;
this.params = "";
}
public static final String METHOD_GET = "get";
public static final String METHOD_POST = "post";
public String httpUrl;
public String method = "post";
public File file;
public String params;
public boolean isCookie = false;
public String sessionid;
public boolean isPicFile = false;
public String filePath;
public String fileName;
public String BOUNDARY = java.util.UUID.randomUUID().toString();
public String PREFIX = "--", LINEND = "\r\n";
public String MULTIPART_FROM_DATA = "multipart/form-data";
public String CHARSET = "UTF-8";
public HashMap<String, String> paramsMap = new HashMap<>();
public HashMap<String, File> paramsFiles = new HashMap<>();
public HttpClient.DownLoadListener downloadProgressListener;
public File downloadFile;
public boolean isDownloadFile=false;
public void initParams() {
paramsMap.clear();
paramsFiles.clear();
}
@SuppressWarnings("unchecked")
public void initParams(HashMap<String, String> paramsMap) {
this.paramsMap = paramsMap;
}
@SuppressWarnings("unchecked")
public void initParams(HashMap<String, String> paramsMap, HashMap<String, File> paramsFile) {
this.paramsMap = paramsMap;
paramsFiles = (HashMap<String, File>) paramsFile.clone();
}
public void put(String k, String v) {
paramsMap.put(k, v);
}
public String getParams() {
Set<String> k = paramsMap.keySet();
String connector = "?";
if (METHOD_POST.equals(method)) {
connector = "";
}
Iterator<String> i = null;
if (k != null) {
i = k.iterator();
}
if (k.size() == 1) {
String temp = i.next();
return connector + temp + "=" + paramsMap.get(temp);
} else if (k.size() > 1) {
StringBuffer sb = new StringBuffer();
String temp = i.next();
sb.append(connector + temp + "=" + paramsMap.get(temp));
while (i.hasNext()) {
temp = i.next();
sb.append("&" + temp + "=" + paramsMap.get(temp));
}
return sb.toString();
} else {
return "";
}
}
public Map<String, File> getFile() {
return paramsFiles;
}
}
请求引擎封装
import com.example.api.webinfo.BaseNetParams;
import com.example.model.utils.LogUtils;
import com.example.model.utils.TextUtils;
/**
* Created by chun on 2016/6/21.
*/
public class JpmHttpEngine {
private final static String TAG = "JpmHttpEngine";
private static JpmHttpEngine jpmHttpEngine = new JpmHttpEngine();
private JpmHttpEngine() {
}
public static JpmHttpEngine getInstance() {
return jpmHttpEngine;
}
public String doRequest(BaseNetParams params) {
HttpClient client = new HttpClient();
String result = client.request(params);
if (TextUtils.isEmpty(result)) {
LogUtils.e(TAG, "----请求结果为空-----");
return null;
}
return result;
}
}
请求客户端(核心封装)
package com.example.api
import android.os.Environment
import android.util.Log
import com.example.api.webinfo.BaseNetParams
import com.example.api.webinfo.CookieUtils
import com.example.model.utils.LogUtils
import com.example.model.utils.TextUtils
import com.zhy.http.okhttp.OkHttpUtils
import com.zhy.http.okhttp.callback.FileCallBack
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.util.HashMap
import java.util.List
import java.util.Set
import okhttp3.Call
import okhttp3.Callback
import okhttp3.FormBody
import okhttp3.Interceptor
import okhttp3.MediaType
import okhttp3.MultipartBody
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import okhttp3.Response
import okhttp3.ResponseBody
import okio.Buffer
import okio.BufferedSource
import okio.ForwardingSource
import okio.Okio
import okio.Source
public class HttpClient {
private static String TAG = "HttpClient"
private OkHttpClient client
public HttpClient() {
client = new OkHttpClient()
}
public String request(BaseNetParams baseNetParams) {
String result = null
LogUtils.e(TAG, "请求URL为:" + baseNetParams.httpUrl + "--请求方式为:" + baseNetParams.method)
if (baseNetParams.isDownloadFile) {
download(baseNetParams)
} else {
if (baseNetParams.paramsFiles != null && baseNetParams.paramsFiles.size() > 0)
LogUtils.e(TAG, "请求参数为:" + baseNetParams.getParams() + "---size:" + baseNetParams.paramsFiles.size())
else
LogUtils.e(TAG, "请求参数为:" + baseNetParams.getParams())
if (baseNetParams != null && baseNetParams.method == BaseNetParams.METHOD_GET) {
result = doGet(baseNetParams)
} else if (baseNetParams != null && baseNetParams.method == BaseNetParams.METHOD_POST && baseNetParams.paramsFiles != null && baseNetParams.paramsFiles.size() > 0) {
result = doPostFile(baseNetParams)
} else if (baseNetParams != null && baseNetParams.method == BaseNetParams.METHOD_POST) {
result = doPost(baseNetParams)
}
}
LogUtils.e(TAG, "服务器返回结果为:" + result)
return result
}
//post请求 在子线程
private String doPost(BaseNetParams baseNetParams) {
FormBody.Builder builder = new FormBody.Builder()
Set<String> keys = baseNetParams.paramsMap.keySet()
for (String key : keys) {
builder.add(key, baseNetParams.paramsMap.get(key))
}
// HttpUrl url=HttpUrl.parse(baseNetParams.httpUrl)
FormBody body = builder.build()
Request.Builder requestBuilder = new Request.Builder().url(baseNetParams.httpUrl).post(body)
if (!TextUtils.isEmpty(CookieUtils.getInstance().getSessionid())) {
requestBuilder.header("Cookie", CookieUtils.getInstance().getSessionid())
}
Request request = requestBuilder.build()
Response response = null
try {
response = client.newCall(request).execute()
List<String> cookies = response.headers("Set-Cookie")
StringBuilder sb = new StringBuilder()
if (cookies != null && cookies.size() > 0) {
for (int i = 0
if (i == 0) {
sb.append(cookies.get(i).substring(0, cookies.get(i).indexOf(";")))
} else {
sb.append(";" + cookies.get(i).substring(0, cookies.get(i).indexOf(";")))
}
}
}
LogUtils.e(TAG, sb.toString())
if (!TextUtils.isEmpty(sb.toString())) {
CookieUtils.getInstance().setSessionid(sb.toString())
}
if (response.isSuccessful()) {
String result = response.body().string()
return result
} else {
LogUtils.e(TAG, "网络请求失败")
}
} catch (IOException e) {
LogUtils.e(TAG, "网络请求失败,IO流错误" + e.getMessage())
}
return null
}
public static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png")
//上传文件 在子线程
private String doPostFile(BaseNetParams baseNetParams) {
// mImgUrls为存放图片的url集合
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM)
Set<String> keys = baseNetParams.paramsFiles.keySet()
for (String key : keys) {
File file = baseNetParams.paramsFiles.get(key)
if (file != null) {
builder.addFormDataPart(key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file))
}
}
HashMap<String, String> paramsMap = baseNetParams.paramsMap
if (paramsMap != null && baseNetParams.paramsMap.size() > 0) {
Set<String> keySet = paramsMap.keySet()
for (String key : keySet) {
builder.addFormDataPart(key, paramsMap.get(key))
}
}
//添加其它信息 在子线程
MultipartBody requestBody = builder.build()
Request.Builder requestBuilder = new Request.Builder().url(baseNetParams.httpUrl).post(requestBody)
if (!TextUtils.isEmpty(CookieUtils.getInstance().getSessionid())) {
requestBuilder.header("Cookie", "PHPSESSID=" + CookieUtils.getInstance().getSessionid())
}
Request request = requestBuilder.build()
Response response = null
try {
response = client.newCall(request).execute()
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response)
String cookie = response.header("Set-Cookie")
if (!TextUtils.isEmpty(cookie)) {
String session = cookie.substring(cookie.indexOf("=") + 1, cookie.indexOf(";"))
CookieUtils.getInstance().setSessionid(session)
}
String result = response.body().string()
return result
} catch (IOException e) {
LogUtils.e(TAG, "网络请求失败,IO流错误" + e.getMessage())
}
return null
}
//get请求 在子线程
private String doGet(BaseNetParams baseNetParams) {
Request.Builder requestBuilder = new Request.Builder().url(baseNetParams.httpUrl)
if (!TextUtils.isEmpty(CookieUtils.getInstance().getSessionid())) {
requestBuilder.header("Cookie", "PHPSESSID=" + CookieUtils.getInstance().getSessionid())
}
Request request = requestBuilder.build()
Response response = null
try {
response = client.newCall(request).execute()
if (response.isSuccessful()) {
String cookie = response.header("Set-Cookie")
if (!TextUtils.isEmpty(cookie)) {
String session = cookie.substring(cookie.indexOf("=") + 1, cookie.indexOf(";"))
CookieUtils.getInstance().setSessionid(session)
}
return response.body().string()
} else {
LogUtils.e(TAG, "网络请求失败")
}
} catch (IOException e) {
LogUtils.e(TAG, "网络请求失败,IO流错误" + e.getMessage())
}
return null
}
public interface DownLoadListener {
void onError(String msg)
void inProgress(float progress, long total)
void downloadOver()
}
//下载文件,这里使用的okhttpUtils 回调在主线程
private void download(final BaseNetParams baseNetParams) {
OkHttpUtils
.get()
.url(baseNetParams.httpUrl)
.build()
.execute(new FileCallBack(baseNetParams.downloadFile.getParentFile().getAbsolutePath(), baseNetParams.downloadFile.getName())
{
@Override
public void onError(Call call, Exception e, int id) {
if (baseNetParams.downloadProgressListener != null) {
baseNetParams.downloadProgressListener.onError(e.getMessage())
}
}
@Override
public void onResponse(File response, int id) {
baseNetParams.downloadProgressListener.downloadOver()
}
@Override
public void inProgress(float progress, long total, int id) {
if (baseNetParams.downloadProgressListener != null) {
baseNetParams.downloadProgressListener.inProgress(progress, total)
}
}
})
}
}
gradle依赖的包
dependencies {
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.zhy:okhttputils:2.6.2'
}