package com.huxq17.example.http; import android.text.TextUtils; import com.andbase.tractor.listener.LoadListener; import com.huxq17.example.http.request.HttpMethod; import com.huxq17.example.http.request.HttpRequest; import com.huxq17.example.http.response.HttpResponse; import com.huxq17.example.http.response.ResponseType; import java.io.File; import java.util.LinkedHashMap; /** * Created by huxq17 on 2015/11/16. */ public class HttpSender { static HttpBase mHttpBase = new OKHttp(); private static class InstanceHolder { private static HttpSender instance = new HttpSender(); } public static HttpSender instance() { return InstanceHolder.instance; } public void post(final String url, LinkedHashMap<String, String> headers, final String params, final LoadListener listener, Object... tag) { HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url); addHeaders(builder, headers); builder.setStringParams(params); //如无特殊需求,这步可以省去,但如果传的参数是json则应该设置contentType为application/json builder.contentType("application/x-www-form-urlencoded").charSet("utf-8"); //网络请求返回的默认类型就是string,如果是String类型就不用设置,如果下载文件和加载图片需要用到InputStream,则设置为ResponseType.InputStream // builder.setResponseType(ResponseType.InputStream); HttpRequest request = builder.build(); mHttpBase.post(request, listener, tag); } public void post(final String url, LinkedHashMap<String, String> headers, LinkedHashMap<String, Object> params, LoadListener listener, Object... tag) { HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url); addHeaders(builder, headers); builder.setParams(params); HttpRequest request = builder.build(); mHttpBase.post(request, listener, tag); } public HttpResponse postSync(final String url, LinkedHashMap<String, String> headers, LinkedHashMap<String, Object> params, Object... tag) { HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url); addHeaders(builder, headers); builder.setParams(params).synchron(); HttpRequest request = builder.build(); return mHttpBase.post(request, null, tag); } public void get(String url, LinkedHashMap<String, String> headers, String params, final LoadListener listener, Object... tag) { if (!TextUtils.isEmpty(params)) { url = url + "?" + params; } HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url); addHeaders(builder, headers); builder.setResponseType(ResponseType.String); mHttpBase.get(builder.build(), listener, tag); } public HttpResponse getInputStreamSync(String url, LinkedHashMap<String, String> headers, String params, Object... tag) { if (!TextUtils.isEmpty(params)) { url = url + "?" + params; } HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url).synchron().setResponseType(ResponseType.InputStream); addHeaders(builder, headers); return mHttpBase.get(builder.build(), null, tag); } public HttpResponse getSync(String url, LinkedHashMap<String, String> headers, String params, Object... tag){ if (!TextUtils.isEmpty(params)) { url = url + "?" + params; } HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url).synchron().setResponseType(ResponseType.String); addHeaders(builder, headers); return mHttpBase.get(builder.build(), null, tag); } public void header(String url, LoadListener listener, Object... tag) { HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url).method(HttpMethod.HEAD); mHttpBase.request(builder.build(), listener, tag); } /** * 同步请求应当在非ui线程中调用 * * @param url * @param tag */ public HttpResponse headerSync(String url, Object... tag) { HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url).synchron().method(HttpMethod.HEAD); HttpResponse response = mHttpBase.request(builder.build(), null, tag); return response; } public void upload(String url, LinkedHashMap<String, String> headers, File[] files, LinkedHashMap<String, Object> params, LoadListener listener, Object tag) { HttpRequest.Builder builder = new HttpRequest.Builder(); builder.url(url).setParams(params); addHeaders(builder, headers); for (File file : files) { builder.addFile("avatar",file); } mHttpBase.post(builder.build(), listener, tag); } public void upload(String url, LinkedHashMap<String, String> headers, File[] files, LoadListener listener, Object tag) { upload(url, headers, files, null, listener, tag); } // /** // * 下载文件,支持多线程下载 // * // * @param info 下载信息,url,文件保存路径等 // * @param listener // * @param tag // */ // public void download(final DownloadInfo info, final Context context, final LoadListener listener, final Object tag) { // TaskPool.getInstance().execute(new DownLoadTask(info,context,listener,tag)); // } private void addHeaders(HttpRequest.Builder builder, LinkedHashMap<String, String> headers) { if (headers != null && headers.size() > 0) { builder.setHeader(headers); } } }