From 0956cec8e7ee74f69c1643f7cedf38d5c522b745 Mon Sep 17 00:00:00 2001 From: richenli <719583022@qq.com> Date: Fri, 10 Apr 2020 10:47:32 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=85=81=E8=AE=B8sync()=E5=92=8Casync()?= =?UTF-8?q?=E7=A9=BA=E5=8F=82=E4=BC=A0=E5=85=A5=20=E5=8E=9F=E5=9B=A0:?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=A1=B9=E7=9B=AE=E7=9A=84=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E6=94=BE=E5=9C=A8json=E5=BD=93=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E4=BB=A5url=E4=B8=BA=E4=B8=BB=202.=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=20HTTP=20http=20=3D=20HTTP.builder().builderTimeOut(3,3,=20Tim?= =?UTF-8?q?eUnit.SECONDS).build();=203.=E4=BC=98=E5=8C=96HttpTask=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ejlchina/okhttps/HTTP.java | 13 ++++ .../java/com/ejlchina/okhttps/HttpTask.java | 59 ++++++++----------- .../java/com/ejlchina/okhttps/HttpUtils.java | 16 +++++ .../ejlchina/okhttps/internal/HttpClient.java | 38 +++++++++++- 4 files changed, 91 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/ejlchina/okhttps/HTTP.java b/src/main/java/com/ejlchina/okhttps/HTTP.java index 5252ff5..22232f1 100644 --- a/src/main/java/com/ejlchina/okhttps/HTTP.java +++ b/src/main/java/com/ejlchina/okhttps/HTTP.java @@ -24,12 +24,25 @@ public interface HTTP { */ AsyncHttpTask async(String url); + /** + * 异步请求 + * @param url 请求地址 + * @return 异步HTTP任务 + */ + AsyncHttpTask async(); + /** * 同步请求 * @param url 请求地址 * @return 同步HTTP任务 */ SyncHttpTask sync(String url); + + /** + * 同步请求 + * @return 同步HTTP任务 + */ + SyncHttpTask sync(); /** * 根据标签取消HTTP任务,只要任务的标签包含指定的Tag就会被取消 diff --git a/src/main/java/com/ejlchina/okhttps/HttpTask.java b/src/main/java/com/ejlchina/okhttps/HttpTask.java index ae8f96f..4d6038d 100644 --- a/src/main/java/com/ejlchina/okhttps/HttpTask.java +++ b/src/main/java/com/ejlchina/okhttps/HttpTask.java @@ -18,6 +18,7 @@ import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; /** @@ -33,7 +34,6 @@ public abstract class HttpTask> { protected boolean nothrow; protected String tag; protected boolean nextOnIO = false; - private String urlPath; private Map headers; private Map pathParams; @@ -246,19 +246,10 @@ public abstract class HttpTask> { * @return HttpTask 实例 **/ public C addPathParam(Map params) { - if (params != null) { - if (pathParams == null) { - pathParams = new HashMap<>(); - } - params.forEach((String name, Object value) -> { - if (name != null && value != null) { - pathParams.put(name, value.toString()); - } - }); - } + addParams(params,this.pathParams); return (C) this; } - + /** * URL参数:拼接在URL后的参数 * @param name 参数名 @@ -281,16 +272,7 @@ public abstract class HttpTask> { * @return HttpTask 实例 **/ public C addUrlParam(Map params) { - if (params != null) { - if (urlParams == null) { - urlParams = new HashMap<>(); - } - params.forEach((String name, Object value) -> { - if (name != null && value != null) { - urlParams.put(name, value.toString()); - } - }); - } + addParams(params,this.urlParams); return (C) this; } @@ -316,19 +298,26 @@ public abstract class HttpTask> { * @return HttpTask 实例 **/ public C addBodyParam(Map params) { - if (params != null) { - if (bodyParams == null) { - bodyParams = new HashMap<>(); + addParams(params,this.bodyParams); + return (C) this; + } + private void addParams(Map params,Map addParam){ + if (params != null) { + if (addParam == null) { + addParam = new HashMap<>(); + } +// params.forEach((String name, Object value) -> { +// if (name != null && value != null) { +// addParam.put(name, value.toString()); +// } +// }); + for (Map.Entry stringEntry : params.entrySet()) { + if (stringEntry.getKey() != null && stringEntry.getValue() != null) { + addParam.put(stringEntry.getKey(), stringEntry.getValue().toString()); + } } - params.forEach((String name, Object value) -> { - if (name != null && value != null) { - bodyParams.put(name, value.toString()); - } - }); } - return (C) this; } - /** * Json参数:请求体为Json,支持多层结构 * @param name JSON键名 @@ -504,6 +493,10 @@ public abstract class HttpTask> { } protected Call prepareCall(String method) { +// OkHttpClient client = new OkHttpClient.Builder() +// .connectTimeout(connectTimeout,timeUnit) // 设置连接超时时间 +// .readTimeout(readTimeout,timeUnit) // 设置读取超时时间 +// .build(); assertNotConflict("GET".equals(method)); Request.Builder builder = new Request.Builder() .url(buildUrlPath()); @@ -526,7 +519,7 @@ public abstract class HttpTask> { } switch (method) { case "GET": - builder.get(); + builder.get().build(); break; case "POST": builder.post(reqBody); diff --git a/src/main/java/com/ejlchina/okhttps/HttpUtils.java b/src/main/java/com/ejlchina/okhttps/HttpUtils.java index a03e365..e2a8e0a 100644 --- a/src/main/java/com/ejlchina/okhttps/HttpUtils.java +++ b/src/main/java/com/ejlchina/okhttps/HttpUtils.java @@ -59,6 +59,14 @@ public class HttpUtils { return getHttp().async(url); } + /** + * 异步请求 + * @return 异步 HttpTask + */ + public static AsyncHttpTask async() { + return getHttp().async(); + } + /** * 同步请求 * @param url 请求地址 @@ -68,6 +76,14 @@ public class HttpUtils { return getHttp().sync(url); } + /** + * 同步请求 + * @return 同步 HttpTask + */ + public static SyncHttpTask sync() { + return getHttp().sync(); + } + /** * 根据标签取消HTTP任务,只要任务的标签包含指定的Tag就会被取消 * @param tag 标签 diff --git a/src/main/java/com/ejlchina/okhttps/internal/HttpClient.java b/src/main/java/com/ejlchina/okhttps/internal/HttpClient.java index 15e6949..5a1ad11 100644 --- a/src/main/java/com/ejlchina/okhttps/internal/HttpClient.java +++ b/src/main/java/com/ejlchina/okhttps/internal/HttpClient.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.Queue; import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; import com.ejlchina.okhttps.*; import com.ejlchina.okhttps.HttpResult.State; @@ -58,7 +59,17 @@ public class HttpClient implements HTTP { public SyncHttpTask sync(String url) { return new SyncHttpTask(this, urlPath(url)); } - + + @Override + public AsyncHttpTask async() { + return new AsyncHttpTask(this, urlPath()); + } + + @Override + public SyncHttpTask sync() { + return new SyncHttpTask(this, urlPath()); + } + @Override public int cancel(String tag) { if (tag == null) { @@ -86,6 +97,7 @@ public class HttpClient implements HTTP { @Override public Call request(Request request) { + return client.newCall(request); } @@ -269,6 +281,13 @@ public class HttpClient implements HTTP { } throw new HttpException("在设置 BaseUrl 之前,您必须使用全路径URL发起请求,当前URL为:" + urlPath); } + + private String urlPath() { + if (baseUrl != null) { + return baseUrl; + } + throw new HttpException("在设置 BaseUrl 之前,您必须使用全路径URL发起请求,当前URL为:" + baseUrl); + } public static class Builder { @@ -430,7 +449,22 @@ public class HttpClient implements HTTP { this.downloadListener = listener; return this; } - + + /** + * 设置超时时间 + * @param connectTimeout 连接时间 + * @param readTimeout 读取时间 + * @param timeUnit + * @return + */ + public Builder builderTimeOut(long connectTimeout, long readTimeout, TimeUnit timeUnit) { + this.client= new OkHttpClient.Builder() + .connectTimeout(connectTimeout,timeUnit) // 设置连接超时时间 + .readTimeout(readTimeout,timeUnit) // 设置读取超时时间 + .build(); + return this; + } + public HTTP build() { if (configurator != null || client == null) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); -- Gitee