11package common .base .services ;
22
3+ import common .base .activitys .BaseNetCallActivity ;
34import common .base .netAbout .INetEvent ;
45import common .base .netAbout .NetDataAndErrorListener ;
56import common .base .netAbout .NetRequestLifeMarker ;
@@ -23,7 +24,7 @@ public void onCreate() {
2324
2425 protected void initANetDataAndErrorListener () {
2526 if (mNetDataAndErrorListener == null ) {
26- mNetDataAndErrorListener = new NetDataAndErrorListener <>( this );
27+ mNetDataAndErrorListener = createANewNetListener ( );
2728 }
2829 }
2930 protected NetDataAndErrorListener <T > createANewNetListener () {
@@ -95,4 +96,95 @@ protected void dealWithResponse(int requestDataType, T result) {
9596 public void onErrorBeforeRequest (int curRequestDataType , int errorType ) {
9697
9798 }
99+
100+ //-------- added by fee 2016-12-14 ---------------------------
101+ /**
102+ *由于本基类的网络请求响应类型T一旦指定后,就只能响应一种类型的,而一些使用场景可能存在不同网络请求接口
103+ 响应的数据类型可能和本基类所指定的T类型不相同(比如:如果本基类T被指定成JSONObject类型的,则要求所请求的网络接口都是满足是JsonObject类型数据,
104+ 这时,如果有一个网络请求响应的不是JsonObject类型的,如github api接口就有响应的数据为JSONArray类型的,
105+ 则这时子类就不能使用基类的netDataAndErrorListener
106+ 以及createANetListener()了),所以为了通用各种响应类型,增加以下代码
107+ 使用方法:如果本基类的网络请求响应类型被指定为用户自定义的对象如{@linkplain common.base.netAbout.BaseServerResult},而如果有一个网络请求
108+ 假设为 BaseApi.getRespoOfAUser(String curGithubUser,NetDataAndErrorListener<List<Respo>>callback);此时直接调用该API并且传入本基类的
109+ netDataAndErrorListener或者createANetListener()都不匹配了,则需要这样使用
110+ NetDataAndErrorListener<List<Respo> listenner = createETypeListener();
111+ 再调用BaseApi.getRespoOfAUser("feer921",listenner);
112+ * @param <E>
113+ * @return 满足此次网络请求响应的数据类型的监听者
114+ */
115+ protected <E > NetDataAndErrorListener <E > createETypeListener () {
116+ return new NetDataAndErrorListener <>(new ETypeNetEvent <E >());
117+ }
118+ /**
119+ * 子类如果有不同于本基类BaseNetCallActivity所指定的网络响应类型T
120+ * 的网络请求响应数据类型,那么可以直接new{@linkplain NetDataAndErrorListener}时传入本类New ETypeNetEvent(E)
121+ * @param <E>
122+ */
123+ public final class ETypeNetEvent <E > implements INetEvent <E >{
124+ private final static String LOG_TAG = "ETypeNetEvent" ;
125+ /**
126+ * 网络请求失败
127+ *
128+ * @param requestDataType 当前请求类型
129+ * @param errorInfo 错误信息
130+ */
131+ @ Override
132+ public void onErrorResponse (int requestDataType , String errorInfo ) {
133+ if (LIFE_CIRCLE_DEBUG ) {
134+ e (TAG , LOG_TAG + "--> onErrorResponse() requestDataType = " + requestDataType + " errorInfo = " + errorInfo );
135+ }
136+ if (requestDataType <= 0 ) {
137+ //是否需要加此判断呢??
138+ return ;
139+ }
140+ //如果用户主动取消了当前网络请求如Loading dialog被取消了(实际上该请求已到达服务端,因而会响应回调)
141+ //则不让各子类处理已被用户取消了的请求
142+ if (curRequestCanceled (requestDataType )) {
143+ return ;
144+ }
145+ addRequestStateMark (requestDataType , NetRequestLifeMarker .REQUEST_STATE_FINISHED );
146+ dealWithErrorResponse (requestDataType ,errorInfo );
147+ }
148+
149+ /**
150+ * 网络请求的响应
151+ *
152+ * @param requestDataType 当前网络请求数据类型
153+ * @param result 响应实体
154+ */
155+ @ Override
156+ public void onResponse (int requestDataType , E result ) {
157+ if (LIFE_CIRCLE_DEBUG ) {
158+ i (TAG , LOG_TAG + "--> onResponse() requestDataType = " + requestDataType + " result = " + result );
159+ }
160+ if (requestDataType <= 0 ) {
161+ //是否要加此判断呢??本框架使用者,都应该用一个整数值区分是哪个网络请求接口吧
162+ return ;
163+ }
164+ if (curRequestCanceled (requestDataType )) {
165+ return ;
166+ }
167+ addRequestStateMark (requestDataType , NetRequestLifeMarker .REQUEST_STATE_FINISHED );
168+ dealWithETypeResponse (requestDataType ,result );
169+ }
170+
171+ /**
172+ * 错误回调,在还没有开始请求之前,比如:一些参数错误
173+ *
174+ * @param curRequestDataType 当前网络请求类型
175+ * @param errorType 错误类型
176+ */
177+ @ Override
178+ public void onErrorBeforeRequest (int curRequestDataType , int errorType ) {
179+ BaseNetCallService .this .onErrorBeforeRequest (curRequestDataType , errorType );
180+ }
181+ }
182+
183+ /***
184+ * 用来处理非本基类被指定的网络请求响应数据类型T类型,而是其他网络响应类型的结果
185+ * @param requestDataType 当前网络请求类型
186+ * @param responseResut 网络请求响应结果 这里为Object对象类型来通用,子类如果处理此回调时,自己强转成预期对象类型
187+ */
188+ protected void dealWithETypeResponse (int requestDataType , Object responseResut ) {
189+ }
98190}
0 commit comments