Skip to content

Commit acaf21e

Browse files
AriesHoo@126.comAriesHoo@126.com
AriesHoo@126.com
authored and
AriesHoo@126.com
committed
新增FastNullException、FastObserverControl及FastManager增加setFastObserverControl用于处理特殊Exception错误类型
1 parent 6f5c029 commit acaf21e

File tree

10 files changed

+103
-14
lines changed

10 files changed

+103
-14
lines changed

app/src/main/java/com/aries/library/fast/demo/App.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void onCreate() {
6363
.showThreadInfo(true)
6464
.methodCount(3));
6565
start = System.currentTimeMillis();
66-
LoggerManager.i(TAG, "start:" + start+";Application:"+ FastUtil.getApplication());
66+
LoggerManager.i(TAG, "start:" + start + ";Application:" + FastUtil.getApplication());
6767
mContext = this;
6868
//最简单UI配置模式-必须进行初始化
6969
// FastManager.init(this);
@@ -94,6 +94,8 @@ public void onCreate() {
9494
.setActivityDispatchEventControl(activityControl)
9595
//设置http请求结果全局控制
9696
.setHttpRequestControl(new HttpRequestControlImpl())
97+
//配置{@link FastObserver#onError(Throwable)}全局处理
98+
.setFastObserverControl(impl)
9799
//设置主页返回键控制-默认效果为2000 毫秒时延退出程序
98100
.setQuitAppControl(impl)
99101
//设置ToastUtil全局控制

app/src/main/java/com/aries/library/fast/demo/impl/AppImpl.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import com.aries.library.fast.demo.R;
1111
import com.aries.library.fast.demo.module.WebAppActivity;
12+
import com.aries.library.fast.demo.retrofit.repository.BaseRepository;
13+
import com.aries.library.fast.i.FastObserverControl;
1214
import com.aries.library.fast.i.FastRecyclerViewControl;
1315
import com.aries.library.fast.i.IFastRefreshLoadView;
1416
import com.aries.library.fast.i.LoadMoreFoot;
@@ -18,6 +20,8 @@
1820
import com.aries.library.fast.i.TitleBarViewControl;
1921
import com.aries.library.fast.i.ToastControl;
2022
import com.aries.library.fast.manager.LoggerManager;
23+
import com.aries.library.fast.retrofit.FastNullException;
24+
import com.aries.library.fast.retrofit.FastObserver;
2125
import com.aries.library.fast.util.FastStackUtil;
2226
import com.aries.library.fast.util.SizeUtil;
2327
import com.aries.library.fast.util.ToastUtil;
@@ -40,6 +44,7 @@
4044
import androidx.core.content.ContextCompat;
4145
import androidx.core.view.ViewCompat;
4246
import androidx.recyclerview.widget.RecyclerView;
47+
import io.reactivex.Observable;
4348
import me.bakumon.statuslayoutmanager.library.StatusLayoutManager;
4449

4550
/**
@@ -51,7 +56,7 @@
5156
*/
5257
public class AppImpl implements DefaultRefreshHeaderCreator, LoadMoreFoot,
5358
FastRecyclerViewControl, MultiStatusView, LoadingDialog,
54-
TitleBarViewControl, QuitAppControl, ToastControl {
59+
TitleBarViewControl, QuitAppControl, ToastControl, FastObserverControl {
5560

5661
private Context mContext;
5762
private String TAG = this.getClass().getSimpleName();
@@ -239,4 +244,21 @@ public Toast getToast() {
239244
public void setToast(Toast toast, RadiusTextView textView) {
240245

241246
}
247+
248+
/**
249+
* @param o {@link FastObserver} 对象用于后续事件逻辑
250+
* @param e 原始错误
251+
* @return true 拦截操作不进行原始{@link FastObserver#onError(Throwable)}后续逻辑
252+
* false 不拦截继续后续逻辑
253+
* {@link FastNullException} 已在{@link FastObserver#onError} }处理如果为该类型Exception可不用管,参考
254+
* {@link BaseRepository#transform(Observable)} 处理逻辑
255+
*/
256+
@Override
257+
public boolean onError(FastObserver o, Throwable e) {
258+
if (e instanceof FastNullException) {
259+
o._onNext(null);
260+
return true;
261+
}
262+
return false;
263+
}
242264
}

app/src/main/java/com/aries/library/fast/demo/retrofit/repository/BaseRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ protected <T> Observable<T> transform(Observable<BaseEntity<T>> observable) {
3333
} else {
3434
if (result.success) {
3535
return result.data != null ? Observable.just(result.data)
36-
: Observable.error(new FastNullException());
36+
: Observable.error(new FastNullException("没有数据"));
3737
} else {
3838
return Observable.error(new NetworkErrorException());
3939
}

library/src/main/java/com/aries/library/fast/FastManager.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.aries.library.fast.i.ActivityDispatchEventControl;
1010
import com.aries.library.fast.i.ActivityFragmentControl;
1111
import com.aries.library.fast.i.ActivityKeyEventControl;
12+
import com.aries.library.fast.i.FastObserverControl;
1213
import com.aries.library.fast.i.FastRecyclerViewControl;
1314
import com.aries.library.fast.i.HttpRequestControl;
1415
import com.aries.library.fast.i.LoadMoreFoot;
@@ -21,6 +22,7 @@
2122
import com.aries.library.fast.manager.GlideManager;
2223
import com.aries.library.fast.manager.LoggerManager;
2324
import com.aries.library.fast.retrofit.FastLoadingObserver;
25+
import com.aries.library.fast.retrofit.FastObserver;
2426
import com.aries.library.fast.util.FastUtil;
2527
import com.aries.library.fast.util.ToastUtil;
2628
import com.aries.library.fast.widget.FastLoadDialog;
@@ -108,6 +110,11 @@ public static FastManager getInstance() {
108110
* 配置网络请求
109111
*/
110112
private HttpRequestControl mHttpRequestControl;
113+
114+
/**
115+
* 配置{@link FastObserver#onError(Throwable)}全局处理
116+
*/
117+
private FastObserverControl mFastObserverControl;
111118
/**
112119
* Activity 主页点击返回键控制
113120
*/
@@ -322,6 +329,20 @@ public FastManager setHttpRequestControl(HttpRequestControl control) {
322329
return this;
323330
}
324331

332+
public FastObserverControl getFastObserverControl() {
333+
return mFastObserverControl;
334+
}
335+
336+
/**
337+
* 配置{@link FastObserver#onError(Throwable)}全局处理
338+
*
339+
* @param control FastObserverControl对象
340+
* @return
341+
*/
342+
public FastManager setFastObserverControl(FastObserverControl control) {
343+
mFastObserverControl = control;
344+
return this;
345+
}
325346

326347
public QuitAppControl getQuitAppControl() {
327348
return mQuitAppControl;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.aries.library.fast.i;
2+
3+
import com.aries.library.fast.retrofit.FastNullException;
4+
import com.aries.library.fast.retrofit.FastObserver;
5+
6+
/**
7+
* @Author: AriesHoo on 2019/7/12 10:25
8+
* @E-Mail: AriesHoo@126.com
9+
* @Function: {@link FastObserver}错误信息拦截并做其它操作处理配合{@link FastNullException}以处理解决接口某些情况下无法回调成功问题
10+
* @Description:
11+
*/
12+
public interface FastObserverControl {
13+
14+
/**
15+
* @param o {@link FastObserver} 对象用于后续事件逻辑
16+
* @param e 原始错误
17+
* @return true 拦截操作不进行原始{@link FastObserver#onError(Throwable)}后续逻辑
18+
* false 不拦截继续后续逻辑
19+
*/
20+
boolean onError(FastObserver o, Throwable e);
21+
}

library/src/main/java/com/aries/library/fast/i/HttpRequestControl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ public interface HttpRequestControl {
2121
*/
2222
void httpRequestSuccess(IHttpRequestControl httpRequestControl, List<?> list, OnHttpRequestListener listener);
2323

24+
/**
25+
* 网络成功回调
26+
*
27+
* @param httpRequestControl 调用页面相关参数
28+
* @param list 数据列表
29+
*/
30+
default void httpRequestSuccess(IHttpRequestControl httpRequestControl, List<?> list) {
31+
httpRequestSuccess(httpRequestControl, list, null);
32+
}
33+
2434
/**
2535
* 网络成功后执行
2636
*

library/src/main/java/com/aries/library/fast/retrofit/FastLoadingObserver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,13 @@ public void onError(Throwable e) {
9999
super.onError(e);
100100
}
101101

102-
protected void showProgressDialog() {
102+
public void showProgressDialog() {
103103
if (mDialog != null) {
104104
mDialog.show();
105105
}
106106
}
107107

108-
protected void dismissProgressDialog() {
108+
public void dismissProgressDialog() {
109109
if (mDialog != null) {
110110
mDialog.dismiss();
111111
}

library/src/main/java/com/aries/library/fast/retrofit/FastNullException.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,21 @@
33
/**
44
* @Author: AriesHoo on 2019/7/11 21:55
55
* @E-Mail: AriesHoo@126.com
6-
* @Function: 特定空对象Exception 用于解决接口某些情况下数据null无法回调{@link FastObserver#_onNext(Object)}的情况
6+
* @Function: 特定空对象Exception 用于解决接口某些情况下
7+
* 数据null无法回调{@link FastObserver#_onNext(Object)}的情况
78
* @Description:
89
*/
910
public class FastNullException extends Exception {
1011

11-
public FastNullException(String message) {
12+
public int errorCode;
13+
14+
public FastNullException(String message, int errorCode) {
1215
super(message);
16+
this.errorCode = errorCode;
17+
}
18+
19+
public FastNullException(String message) {
20+
this(message, -1);
1321
}
1422

1523
public FastNullException(String message, Throwable cause) {

library/src/main/java/com/aries/library/fast/retrofit/FastObserver.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.aries.library.fast.FastManager;
44
import com.aries.library.fast.i.IHttpRequestControl;
55

6-
import io.reactivex.annotations.NonNull;
76
import io.reactivex.observers.DefaultObserver;
87

98
/**
@@ -17,7 +16,7 @@
1716
*/
1817
public abstract class FastObserver<T> extends DefaultObserver<T> {
1918

20-
private IHttpRequestControl mHttpRequestControl;
19+
public IHttpRequestControl mHttpRequestControl;
2120

2221
public FastObserver() {
2322
this(null);
@@ -34,8 +33,14 @@ public void onComplete() {
3433

3534
@Override
3635
public void onError(Throwable e) {
36+
//错误全局拦截控制
37+
boolean isIntercept = FastManager.getInstance().getFastObserverControl() != null ?
38+
FastManager.getInstance().getFastObserverControl().onError(this, e) : false;
39+
if (isIntercept) {
40+
return;
41+
}
3742
if (e instanceof FastNullException) {
38-
_onNext(null);
43+
onNext(null);
3944
return;
4045
}
4146
if (FastManager.getInstance().getHttpRequestControl() != null) {
@@ -52,10 +57,10 @@ public void onNext(T entity) {
5257
/**
5358
* 获取成功后数据展示
5459
*
55-
* @param entity
60+
* @param entity 可能为null
5661
*/
57-
public abstract void _onNext(@NonNull T entity);
62+
public abstract void _onNext(T entity);
5863

59-
public void _onError(@NonNull Throwable e) {
64+
public void _onError(Throwable e) {
6065
}
6166
}

library/src/main/java/com/aries/library/fast/retrofit/FastRetrofit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.aries.library.fast.retrofit;
22

3-
import androidx.annotation.Nullable;
43
import android.text.TextUtils;
54
import android.util.Log;
65

@@ -16,6 +15,7 @@
1615
import javax.net.ssl.SSLSocketFactory;
1716
import javax.net.ssl.X509TrustManager;
1817

18+
import androidx.annotation.Nullable;
1919
import io.reactivex.Observable;
2020
import io.reactivex.functions.Consumer;
2121
import io.reactivex.schedulers.Schedulers;

0 commit comments

Comments
 (0)