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