From 71a01a5e8a1427bd1ec6556e8f29486bf42930fb Mon Sep 17 00:00:00 2001 From: huangxy <630686026@qq.com> Date: Thu, 21 Jul 2016 21:20:01 +0800 Subject: [PATCH 1/6] Create XHttpCallBack.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增泛型序列化回调接口,简化了接口,支持返回String、Array、Entity、List、BaseEntity等等,支持基类预处理 --- .../http/okhttp/callback/XHttpCallBack.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java diff --git a/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java b/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java new file mode 100644 index 0000000..1b313ce --- /dev/null +++ b/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java @@ -0,0 +1,70 @@ +package com.zhy.http.okhttp.callback; + +import com.google.gson.Gson; +import com.google.gson.internal.$Gson$Types; +import com.zhy.http.okhttp.callback.Callback; + +import org.json.JSONException; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +import okhttp3.Call; +import okhttp3.Response; + +/** + * Created by Git@Smark on 2016/7/17. + * 简化接口,支持返回String、Array、Entity、List、BaseEntity等等 + */ +public abstract class XHttpCallBack extends Callback { + + @Override + public T parseNetworkResponse(Response response, int id) throws Exception { + String result = response.body().string(); + try { + result = unBunding(result); + }catch (Exception e){ + onParser(e, id); + return null; + } + if (getClass().getGenericSuperclass() == XHttpCallBack.class){ + return (T)result;// 默认返回String + } + if(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0] == String.class){ + return (T)result;// String类型直接返回 + } + try { + Type type = $Gson$Types.canonicalize(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]); + return new Gson().fromJson(result, type); + }catch (Exception e){ + onParser(e, id); + } + return null; + } + + @Override + public void onResponse(T response, int id) { + if (response != null) onSuccess(response, id); + } + + public void onParser(Exception e, int id){// 数据解析错误,统一处理 + e.printStackTrace(); + } + + @Override + public void onError(Call call, Exception e, int id) {// 网络请求错误,统一处理 + e.printStackTrace(); + } + + public String unBunding(String json) throws JSONException { + // 很多情况下返回的json是这种格式的:{"code": 0,"msg": "success","data": [{"username": "huangxy","password": "123456",...}]}, 统一处理 + // 这里只适用于处理获取一个返回Json串,如果不需要统一处理建议定义一个泛型基类直接返回,参考BaseEntity + // 如果要同时获取多个data1、data2...,建议直接Entity返回 + // JSONArray array = new JSONArray(json); + // JSONObject obj = new JSONObject(json); + // return obj.getString("data"); + return json; + } + + public abstract void onSuccess(T result, int id); +} From 416628088c65ba4872a37214a406de8a043b65c9 Mon Sep 17 00:00:00 2001 From: huangxy <630686026@qq.com> Date: Thu, 21 Jul 2016 21:22:51 +0800 Subject: [PATCH 2/6] Create BaseEntity.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增泛型基类BaseEntity --- .../main/java/com/zhy/sample_okhttp/BaseEntity.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sample-okhttp/src/main/java/com/zhy/sample_okhttp/BaseEntity.java diff --git a/sample-okhttp/src/main/java/com/zhy/sample_okhttp/BaseEntity.java b/sample-okhttp/src/main/java/com/zhy/sample_okhttp/BaseEntity.java new file mode 100644 index 0000000..a732c7d --- /dev/null +++ b/sample-okhttp/src/main/java/com/zhy/sample_okhttp/BaseEntity.java @@ -0,0 +1,10 @@ +package com.zhy.sample_okhttp; + +/** + * Created by Git@Smark on 2016/7/21. + */ +public class BaseEntity { + public int Code; + public String msg; + public T data; +} From 016ef6539061b7fa505264da89f7b204d99bdca5 Mon Sep 17 00:00:00 2001 From: huangxy <630686026@qq.com> Date: Thu, 21 Jul 2016 21:26:24 +0800 Subject: [PATCH 3/6] Update MainActivity.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增泛型序列化接口XHttpCallBack使用示例 --- .../com/zhy/sample_okhttp/MainActivity.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java b/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java index ec7fb40..ab35c59 100644 --- a/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java +++ b/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java @@ -17,6 +17,7 @@ import com.zhy.http.okhttp.callback.FileCallBack; import com.zhy.http.okhttp.callback.GenericsCallback; import com.zhy.http.okhttp.callback.StringCallback; +import com.zhy.http.okhttp.callback.XHttpCallBack; import com.zhy.http.okhttp.cookie.CookieJarImpl; import java.io.File; @@ -199,7 +200,92 @@ public void onResponse(List response, int id) } }); } + + public XHttpUtilsDemo() + { + String url = "https://github.com/GitSmark"; + OkHttpUtils + .get() + .url(url) + .addParams("param1", "value") + .addParams("param2", "value") + .build() + .execute(new XHttpCallBack() { + + @Override + public void onSuccess(Object result, int id) { + //Success + } + }); + + OkHttpUtils + .post() + .url(url) + .addParams("param1", "value") + .addParams("param2", "value") + .build() + .execute(new XHttpCallBack() { + + @Override + public void onSuccess(User result, int id) { + //Success + } + }); + + OkHttpUtils + .post() + .url(url) + .addParams("param1", "value") + .addParams("param2", "value") + .build() + .execute(new XHttpCallBack>() { + + @Override + public void onSuccess(List result, int id) { + //Success + } + + //@Override + //public void onParser(Exception e, int id) { + // super.onParser(e, id); + //} + }); + + OkHttpUtils + .post() + .url(url) + .addParams("param1", "value") + .addParams("param2", "value") + .build() + .execute(new XHttpCallBack>>() { + + @Override + public void onSuccess(BaseEntity> result, int id) { + //Success + } + }); + + OkHttpUtils + .post() + .url(url) + .addParams("param1", "value") + .addParams("param2", "value") + .build() + .execute(new XHttpCallBack>() { + + @Override + public String unBunding(String json) throws JSONException { + JSONObject obj = new JSONObject(json); + return obj.getString("data"); + } + + @Override + public void onSuccess(List result, int id) { + //Success + } + }); + } public void getHttpsHtml(View view) { From 8d8fedc476a9189269207b20cb9490fbaf184bb8 Mon Sep 17 00:00:00 2001 From: huangxy <630686026@qq.com> Date: Thu, 21 Jul 2016 22:50:13 +0800 Subject: [PATCH 4/6] Update MainActivity.java --- .../src/main/java/com/zhy/sample_okhttp/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java b/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java index ab35c59..99958d6 100644 --- a/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java +++ b/sample-okhttp/src/main/java/com/zhy/sample_okhttp/MainActivity.java @@ -201,7 +201,7 @@ public void onResponse(List response, int id) }); } - public XHttpUtilsDemo() + public void XHttpUtilsDemo() { String url = "https://github.com/GitSmark"; From 5600c98ebd50db75712c5441a9b503f5b45b975a Mon Sep 17 00:00:00 2001 From: huangxy <630686026@qq.com> Date: Mon, 8 Aug 2016 23:12:49 +0800 Subject: [PATCH 5/6] Update XHttpCallBack.java --- .../http/okhttp/callback/XHttpCallBack.java | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java b/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java index 1b313ce..b27a24c 100644 --- a/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java +++ b/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java @@ -20,11 +20,8 @@ public abstract class XHttpCallBack extends Callback { @Override public T parseNetworkResponse(Response response, int id) throws Exception { - String result = response.body().string(); - try { - result = unBunding(result); - }catch (Exception e){ - onParser(e, id); + String result = unBunding(response.body().string()); + if (result == null){ return null; } if (getClass().getGenericSuperclass() == XHttpCallBack.class){ @@ -33,13 +30,19 @@ public T parseNetworkResponse(Response response, int id) throws Exception { if(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0] == String.class){ return (T)result;// String类型直接返回 } - try { - Type type = $Gson$Types.canonicalize(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]); - return new Gson().fromJson(result, type); - }catch (Exception e){ - onParser(e, id); - } - return null; + Type type = $Gson$Types.canonicalize(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]); + return new Gson().fromJson(result, type); + } + + //注意:非UI线程,可执行耗时操作 + public String unBunding(String json) throws JSONException { + // 很多情况下返回的json是这种格式的:{"code": 0,"msg": "上传成功","data": [{"id": 1,"name": "huangxy",...}]}, 统一处理 + // 这里只适用于处理获取一个返回Json串,如果不需要统一处理建议定义一个泛型基类直接返回,参考BaseEntity + // 如果要同时获取多个data1、data2...,建议直接Entity返回 + // JSONArray array = new JSONArray(json); + // JSONObject obj = new JSONObject(json); + // return obj.getString("data"); + return json; } @Override @@ -47,23 +50,21 @@ public void onResponse(T response, int id) { if (response != null) onSuccess(response, id); } - public void onParser(Exception e, int id){// 数据解析错误,统一处理 - e.printStackTrace(); - } - @Override - public void onError(Call call, Exception e, int id) {// 网络请求错误,统一处理 + public void onError(Call call, Exception e, int id) { + if (e instanceof JSONException || e instanceof JsonIOException || e instanceof JsonSyntaxException){ + onParser(e, id); + return; + } + // 网络请求错误,统一处理 + // ToastUtils.Show(R.drawable.ic_close, R.string.error_request, Toast.LENGTH_LONG); e.printStackTrace(); } - public String unBunding(String json) throws JSONException { - // 很多情况下返回的json是这种格式的:{"code": 0,"msg": "success","data": [{"username": "huangxy","password": "123456",...}]}, 统一处理 - // 这里只适用于处理获取一个返回Json串,如果不需要统一处理建议定义一个泛型基类直接返回,参考BaseEntity - // 如果要同时获取多个data1、data2...,建议直接Entity返回 - // JSONArray array = new JSONArray(json); - // JSONObject obj = new JSONObject(json); - // return obj.getString("data"); - return json; + // 数据解析错误,统一处理 + public void onParser(Exception e, int id){ + // ToastUtils.Show(R.drawable.ic_close, R.string.error_parser, Toast.LENGTH_LONG); + e.printStackTrace(); } public abstract void onSuccess(T result, int id); From 1f7ae37d13537b3d3005a122e3c11d8fe2ecfc9a Mon Sep 17 00:00:00 2001 From: huangxy <630686026@qq.com> Date: Mon, 8 Aug 2016 23:14:32 +0800 Subject: [PATCH 6/6] Update XHttpCallBack.java --- .../main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java b/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java index b27a24c..a3bd4e9 100644 --- a/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java +++ b/okhttputils/src/main/java/com/zhy/http/okhttp/callback/XHttpCallBack.java @@ -1,6 +1,8 @@ package com.zhy.http.okhttp.callback; import com.google.gson.Gson; +import com.google.gson.JsonIOException; +import com.google.gson.JsonSyntaxException; import com.google.gson.internal.$Gson$Types; import com.zhy.http.okhttp.callback.Callback;