From 8ae4bd7bf19027a294073fd57f8d1c9f95bf8918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=90=E5=8B=B0?= Date: Thu, 29 Dec 2016 14:27:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=96=87=E6=A1=A3=E8=A1=A5?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bihe0832/request/libware/TextUtils.java | 11 +- .../libware/request/BaseConnection.java | 2 + .../libware/request/HTTPConnection.java | 4 +- .../libware/request/HTTPRequestHandler.java | 2 +- .../libware/request/HTTPSConnection.java | 2 +- .../request/libware/request/HTTPServer.java | 3 + .../request/libware/request/HttpRequest.java | 21 ++-- .../request/libware/request/HttpResponse.java | 25 ++-- .../libware/request/HttpResponseHandler.java | 4 + .../libware/request/MyX509TrustManager.java | 4 +- .../request/libware/thread/ThreadManager.java | 2 +- README.md | 116 ++++++++++++++++-- 12 files changed, 143 insertions(+), 53 deletions(-) diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/TextUtils.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/TextUtils.java index 15f502d..d688f17 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/TextUtils.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/TextUtils.java @@ -6,14 +6,11 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +/** + * 基本的工具类 处理字符串判空、编码格式转换等 + */ public class TextUtils { - /** - * 判断字符串是否为空 - * - * @param s - * 需要判断的字符串 - * @return boolean 为空返回true - */ + public static boolean ckIsEmpty(String s) { if (s == null || s.trim().equals("") || s.trim().equals("null")) { return true; diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/BaseConnection.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/BaseConnection.java index 91107d9..9b32b68 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/BaseConnection.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/BaseConnection.java @@ -14,6 +14,8 @@ import java.util.Map; /** + * HttpURLConnection封装基类,网络请求,设置请求协议头、发送请求 + * * Created by hardyshi on 16/11/22. */ public abstract class BaseConnection { diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPConnection.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPConnection.java index 5a10185..26ed132 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPConnection.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPConnection.java @@ -4,7 +4,9 @@ import java.net.URL; /** - * Created by hardyshi on 16/11/22. + * + * HTTP 请求类 + * */ public class HTTPConnection extends BaseConnection { diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPRequestHandler.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPRequestHandler.java index 8022253..38cf91f 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPRequestHandler.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPRequestHandler.java @@ -1,7 +1,7 @@ package com.bihe0832.request.libware.request; /** - * Created by hardyshi on 16/11/22. + * 网络请求基类中将请求结果处理后的返回内容转化为业务逻辑相关错误 */ public abstract class HTTPRequestHandler { public abstract void onSuccess(int statusCode,String response); diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPSConnection.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPSConnection.java index a2fd010..8b548da 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPSConnection.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPSConnection.java @@ -10,7 +10,7 @@ import javax.net.ssl.TrustManager; /** - * Created by hardyshi on 16/11/22. + * HTTPS 请求类 */ public class HTTPSConnection extends BaseConnection { diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPServer.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPServer.java index ba27b2c..10a0dc2 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPServer.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HTTPServer.java @@ -11,6 +11,9 @@ import java.net.HttpURLConnection; +/** + * 网络请求分发、执行类 + */ public class HTTPServer { private static final String LOG_TAG = "bihe0832 REQUEST"; diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpRequest.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpRequest.java index c2784a3..de260e6 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpRequest.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpRequest.java @@ -10,6 +10,11 @@ import java.util.HashMap; +/** + * + * 网络请求实例类的基类,所有具体的网络请求都是他的实现,他与{@link HttpResponse}一般成对使用 + * + */ public abstract class HttpRequest { @@ -56,19 +61,12 @@ public void onSuccess(int statusCode,String response) { if(TextUtils.ckIsEmpty(response)){ Log.e(LOG_TAG,"responseBody is null"); }else{ - int flag = HTTPServer.Error; try { JSONObject json = new JSONObject(response); int ret = json.getInt(HttpResponse.HTTP_RESP_PARAM_RET); - if (ret == 0) { - flag = HTTPServer.Succ; - } else { - flag = ret; - } onRequestSuccess(ret, json); } catch (JSONException e) { - flag = HTTPServer.HttpRespParseError; - onRequestFailure(flag, response); + onRequestFailure(HTTPServer.HttpRespParseError, response); } } }catch (Exception e){ @@ -79,18 +77,13 @@ public void onSuccess(int statusCode,String response) { @Override public void onFailure(int statusCode, String responseBody) { - if (null == responseBody) { - Log.e(LOG_TAG,"responseBody is null"); - onRequestFailure(statusCode, null); - }else{ - onRequestFailure(statusCode, responseBody); - } int code = HTTPServer.NetWorkException; if (statusCode == 0) { code = HTTPServer.NetWorkException; } else if (statusCode > 300) { code = HTTPServer.HttpSatutsError; } + onRequestFailure(code, responseBody); } }; } diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponse.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponse.java index 812bd90..1a59830 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponse.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponse.java @@ -8,6 +8,13 @@ import org.json.JSONException; import org.json.JSONObject; + +/** + * + * 网络请求返回结果的基类,所有具体的网络请求返回都是他的实现,他与{@link HttpRequest}一般成对使用 + * + */ + public abstract class HttpResponse { private static final String LOG_TAG = "bihe0832 REQUEST"; @@ -38,9 +45,9 @@ public void parseSuccessResponse(int ret, JSONObject responseJson) { } } - public void parseFailureResponse(int statusCode,String errorResponse) { + public void parseFailureResponse(int flag,String errorResponse) { this.ret = HTTPServer.RET_FAIL; - this.flag = processNetErrorCode(statusCode); + this.flag = flag; if(!TextUtils.ckIsEmpty(errorResponse)){ this.msg = errorResponse; } @@ -87,18 +94,4 @@ public String toString() { builder.append("&msg=" + msg); return builder.toString(); } - - /** - * @param statusCode - * 当其值为0时说明是异常类错误;当其值为大于300时,说明是http错误;否则的话按默认系统错误处理 网络请求模块的错误处理 - */ - private int processNetErrorCode(int statusCode) { - int code = HTTPServer.NetWorkException; - if (statusCode == 0) { - code = HTTPServer.NetWorkException; - } else if (statusCode > 300) { - code = HTTPServer.HttpSatutsError; - } - return code; - } } diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponseHandler.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponseHandler.java index 483b375..d0e4b34 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponseHandler.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/HttpResponseHandler.java @@ -1,4 +1,8 @@ package com.bihe0832.request.libware.request; + +/** + * 具体业务网络请求结果实例的基类 + */ public interface HttpResponseHandler { public void onResponse(T response); } diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/MyX509TrustManager.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/MyX509TrustManager.java index 907e4e9..fe69dc2 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/request/MyX509TrustManager.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/request/MyX509TrustManager.java @@ -9,9 +9,7 @@ import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; -/** - * Created by hardyshi on 16/11/23. - */ + public class MyX509TrustManager implements X509TrustManager { X509TrustManager sunJSSEX509TrustManager; diff --git a/Advanced/app/src/main/java/com/bihe0832/request/libware/thread/ThreadManager.java b/Advanced/app/src/main/java/com/bihe0832/request/libware/thread/ThreadManager.java index 0c0b942..ca77d2d 100644 --- a/Advanced/app/src/main/java/com/bihe0832/request/libware/thread/ThreadManager.java +++ b/Advanced/app/src/main/java/com/bihe0832/request/libware/thread/ThreadManager.java @@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicInteger; /** - * Created by hardyshi on 16/6/2. + * 基于HandlerThread的多线程处理分发类 */ public class ThreadManager { diff --git a/README.md b/README.md index 0fc9651..d9818bb 100644 --- a/README.md +++ b/README.md @@ -14,18 +14,116 @@ │ └── Basic:com.bihe0832.request.demo.basic.apk对应的源码 -## 支持类型 +## 项目区别 -### 请求类型 +Advanced和Basic的差异主要表现在 -- HTTP -- HTTPS +### 共同点 -### 请求类型 +- 两个项目的网络请求都是基于HTTPURLConnection封装的 -- GET -- POST +- 两个项目都支持以下请求: + - 请求协议:通过url是以http开头还是https + - HTTP + - HTTPS -### 其他 + - 请求类型:通过网络请求是否包含data内容来区分get或者post + - GET + - POST + - 其他 + - 支持带cookie的网络请求 -- 支持带cookie的网络请求 \ No newline at end of file + +### 差异点 + +- Advanced所有的网络请求时单线程分发,但是多线程处理的;Basic的网络请求的处理和分发都是在同一个线程 +- Advanced会在库里面完成网络请求结果的解析,最终网络请求结果会被处理为一个json数据,Basic层没有做任何处理,将网络请求的内容以String返回。 + +## 代码介绍 + +代码介绍的篇幅主要介绍封装的库以及使用时候的调用方法,主要以Advanced为基础来介绍,例外这里不对源码做详细的介绍,只介绍几个主要类的使用方法,详细代码请自行参照源码。 + +### 封装源码介绍 + +这部分内容是对于HttpURLConnection的具体封装的代码。 + + + ├── TextUtils.java :基本的工具类 处理字符串判空、编码格式转换等 + │ + ├── request + │ │ + │   ├── BaseConnection.java :基本的工具类 处理字符串判空、编码格式转换等 + │ │ + │   ├── HTTPConnection.java :HTTP 请求类 + │ │ + │   ├── HTTPRequestHandler.java :网络请求基类中将请求结果处理后的返回内容转化为业务逻辑相关错误 + │ │ + │   ├── HTTPSConnection.java :HTTPS 请求类 + │ │ + │   ├── HTTPServer.java :网络请求分发、执行类 + │ │ + │   ├── HttpRequest.java :网络请求实例类的基类,所有具体的网络请求都是他的实现 + │ │ + │   ├── HttpResponse.java :网络请求返回结果的基类,所有具体的网络请求返回都是他的实现 + │ │ + │   ├── HttpResponseHandler.java :具体业务网络请求结果实例的基类 + │ │ + │   └── MyX509TrustManager.java + │ + └── thread + │ + └── ThreadManager.java :基于HandlerThread的多线程处理分发类 + + +### 具体请求实例 + +这部分内容是具体开发中一个新的HTTP请求以及返回结果解析处理的类 + + ├── GetRequest.java : 一个GET请求的事例,完成了GET参数拼装 + │ + ├── PostRequest.java : 一个POST请求的事例,完成了POST参数拼装 + │ + └── TestResponse.java :请求返回处理事例,完成请求结果的解析。由于上面两个请求的返回结构一致,因此使用相同的结果处理类 + +### 调用代码 + +这部分内容是具体开发中当发送一个对应的网络请求的时候的代码实现 + + //具体GET请求构造实例 + private void sendGetRequest(){ + String para = mRequestParaEditText.getText().toString(); + if(null != para && para.length() > 0){ + TestResponesHandler handle = new TestResponesHandler(); + GetRequest request = new GetRequest(para,handle); + HTTPServer.getInstance().doRequest(request); + }else{ + showResult("请在输入框输入请求内容!"); + } + } + + //具体POST请求构造实例 + private void sendPostRequest(){ + String para = mRequestParaEditText.getText().toString(); + if(null != para && para.length() > 0){ + TestResponesHandler handle = new TestResponesHandler(); + PostRequest request = new PostRequest(para,handle); + HTTPServer.getInstance().doRequest(request); + }else{ + showResult("请在输入框输入请求内容!"); + } + } + + //具体请求返回结果的处理逻辑 + private class TestResponesHandler implements HttpResponseHandler { + + @Override + public void onResponse(TestResponse response) { + showResult("ret:\n\t" + response.ret + " \n " + + "msg:\n\t" + response.msg+ " \n " + + "para:\n\t" + response.para+ " \n "); + } + } + + + + \ No newline at end of file