Skip to content

Commit 9f50a1a

Browse files
committed
1、新增HttpErrorControl Retrofit网络请求全局错误设置并新增FastConfig里接口设置
2、同步修改FastObserver以实现错误码全局控制目的 3、修改FastRetrofit类设置网络请求超时错误,并同步修改FastMultiUrl初始化时机
1 parent 7edfab5 commit 9f50a1a

File tree

13 files changed

+154
-23
lines changed

13 files changed

+154
-23
lines changed

apk/sample.apk

976 Bytes
Binary file not shown.

app/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ android {
1414
applicationId "com.aries.library.fast.demo"
1515
minSdkVersion ext.minSdkVersion
1616
targetSdkVersion ext.targetSdkVersion
17-
versionCode 218
18-
versionName "2.1.8-alpha"
17+
versionCode 219
18+
versionName "2.1.9-alpha"
1919
multiDexEnabled true
2020
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
2121
buildConfigField "String", "BASE_URL", "\"https://api.douban.com/\""
@@ -89,5 +89,7 @@ dependencies {
8989
//图片加载
9090
compile 'com.github.bumptech.glide:glide:4.0.0'
9191
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
92+
//以上库library里使用provided只是编译使用时需根据项目选择相应版本
93+
9294

9395
}

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.aries.library.fast.demo.helper.RefreshHeaderHelper;
1414
import com.aries.library.fast.entity.FastQuitConfigEntity;
1515
import com.aries.library.fast.entity.FastTitleConfigEntity;
16+
import com.aries.library.fast.i.HttpErrorControl;
1617
import com.aries.library.fast.i.IMultiStatusView;
1718
import com.aries.library.fast.i.LoadMoreFoot;
1819
import com.aries.library.fast.i.LoadingDialog;
@@ -27,6 +28,7 @@
2728
import com.aries.ui.widget.progress.UIProgressView;
2829
import com.chad.library.adapter.base.BaseQuickAdapter;
2930
import com.chad.library.adapter.base.loadmore.LoadMoreView;
31+
import com.marno.easystatelibrary.EasyStatusView;
3032
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreater;
3133
import com.scwang.smartrefresh.layout.api.RefreshHeader;
3234
import com.scwang.smartrefresh.layout.api.RefreshLayout;
@@ -58,7 +60,7 @@ public void onCreate() {
5860
//.setHeaders(header)//设置统一请求头
5961
.setLogEnable(BuildConfig.DEBUG)//设置请求全局log-可设置tag及Level类型
6062
//.setLogEnable(BuildConfig.DEBUG, TAG, HttpLoggingInterceptor.Level.BASIC)
61-
.setTimeout(30);//设置统一超时--也可单独调用read/write/connect超时(可以设置时间单位TimeUnit)
63+
.setTimeout(20);//设置统一超时--也可单独调用read/write/connect超时(可以设置时间单位TimeUnit)
6264

6365
//以下为配置多BaseUrl
6466
//step1
@@ -176,6 +178,10 @@ public IMultiStatusView createMultiStatusView() {
176178
})
177179
//设置全局网络请求等待Loading提示框如登录等待loading
178180
.setLoadingDialog(new LoadingDialog() {
181+
/**
182+
* @param activity 可根据Activity不同设置不同属性
183+
* @return
184+
*/
179185
@Nullable
180186
@Override
181187
public FastLoadDialog createLoadingDialog(@Nullable Activity activity) {
@@ -192,6 +198,22 @@ public FastLoadDialog createLoadingDialog(@Nullable Activity activity) {
192198
// return new FastLoadDialog(activity, MyDialog);
193199
}
194200
})
201+
//设置Retrofit全局异常处理-观察者必须为FastObserver及其子类
202+
.setHttpErrorControl(new HttpErrorControl() {
203+
@Override
204+
public boolean createHttpErrorControl(int errorRes, int errorCode, @io.reactivex.annotations.NonNull Throwable e, Context context, Object... args) {
205+
LoggerManager.d("args:" + args + ";context:" + context.getClass().getSimpleName());
206+
if (args != null) {//可以将具体调用界面部分视图传递到全局控制
207+
if (args[0] instanceof EasyStatusView) {
208+
LoggerManager.d("args:" + args[0]);
209+
((EasyStatusView) args[0]).error();
210+
}
211+
LoggerManager.d("args:" + args[1]);
212+
}
213+
//返回值true则FastObserver不会回调_onError所有逻辑处理都在全局位置处理
214+
return false;
215+
}
216+
})
195217
//设置SmartRefreshLayout刷新头-自定加载使用BaseRecyclerViewAdapterHelper
196218
.setDefaultRefreshHeader(new DefaultRefreshHeaderCreater() {
197219
@NonNull

app/src/main/java/com/aries/library/fast/demo/module/activity/MovieBaseFragment.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void loadData(int page) {
127127
DEFAULT_PAGE_SIZE = 15;//接口最大支持单页100
128128
ApiRepository.getInstance().getBaseMovie(mType, page * DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE)
129129
.compose(bindUntilEvent(FragmentEvent.DESTROY))
130-
.subscribe(new FastObserver<BaseMovieEntity>() {
130+
.subscribe(new FastObserver<BaseMovieEntity>(this.getContext(), new Object[]{mEasyStatusView,this}) {
131131
@Override
132132
public void _onNext(BaseMovieEntity entity) {
133133
mRefreshLayout.finishRefresh();
@@ -145,6 +145,9 @@ public void _onNext(BaseMovieEntity entity) {
145145
mAdapter.setNewData(null);
146146
mAdapter.openLoadAnimation();
147147
mAdapter.addData(entity.subjects);
148+
if (entity.count < DEFAULT_PAGE_SIZE) {
149+
mAdapter.loadMoreEnd();
150+
}
148151
LoggerManager.d("ApiRepository", "title:" + entity.title + ";start:" + entity.start + ";count:" + entity.count + ";total:" + entity.total);
149152
if (!entity.hasMore()) {
150153
mAdapter.loadMoreEnd(page == 0);
@@ -153,6 +156,7 @@ public void _onNext(BaseMovieEntity entity) {
153156

154157
@Override
155158
public void _onError(int errorRes, int errorCode, Throwable e) {
159+
super._onError(errorRes, errorCode, e);
156160
mRefreshLayout.finishRefresh();
157161
mAdapter.loadMoreComplete();
158162
LoggerManager.e("error:" + getString(errorRes) + ";errorCode:" + errorCode + ";Throwable:" + e.getMessage());

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
import com.aries.library.fast.demo.constant.MovieConstant;
55
import com.aries.library.fast.demo.retrofit.service.ApiService;
66
import com.aries.library.fast.retrofit.FastRetrofit;
7+
import com.aries.library.fast.retrofit.FastTransformer;
78

89
import java.util.HashMap;
910
import java.util.Map;
1011

1112
import io.reactivex.Observable;
1213

13-
import static com.aries.library.fast.retrofit.FastTransformer.switchSchedulers;
14-
1514

1615
/**
1716
* Created: AriesHoo on 2017/9/7 11:00
@@ -22,8 +21,10 @@
2221
public class ApiRepository extends BaseRepository {
2322

2423
private static volatile ApiRepository instance;
24+
private ApiService mApiService;
2525

2626
private ApiRepository() {
27+
mApiService = getApiService();
2728
}
2829

2930
public static ApiRepository getInstance() {
@@ -52,7 +53,7 @@ public Observable<BaseMovieEntity> getTopMovie(int start, int count) {
5253
Map<String, Object> params = new HashMap<>();
5354
params.put("start", start);
5455
params.put("count", count);
55-
return switchSchedulers(getApiService().getTopMovie(params));
56+
return FastTransformer.switchSchedulers(mApiService.getTopMovie(params));
5657
}
5758

5859
/**
@@ -66,7 +67,7 @@ public Observable<BaseMovieEntity> getInTheatersMovie(int start, int count) {
6667
Map<String, Object> params = new HashMap<>();
6768
params.put("start", start);
6869
params.put("count", count);
69-
return switchSchedulers(getApiService().getInTheatersMovie(params));
70+
return FastTransformer.switchSchedulers(getApiService().getInTheatersMovie(params));
7071
}
7172

7273
/**
@@ -80,7 +81,7 @@ public Observable<BaseMovieEntity> getComingSoonMovie(int start, int count) {
8081
Map<String, Object> params = new HashMap<>();
8182
params.put("start", start);
8283
params.put("count", count);
83-
return switchSchedulers(getApiService().getComingSoonMovie(params));
84+
return FastTransformer.switchSchedulers(getApiService().getComingSoonMovie(params));
8485
}
8586

8687
public Observable<BaseMovieEntity> getBaseMovie(int type, int start, int count) {

library/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
defaultConfig {
99
minSdkVersion 15
1010
targetSdkVersion 25
11-
versionCode 218
12-
versionName "2.1.8-alpha"
11+
versionCode 219
12+
versionName "2.1.9-alpha"
1313
}
1414
buildTypes {
1515
release {

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.aries.library.fast.delegate.FastTitleDelegate;
2222
import com.aries.library.fast.entity.FastQuitConfigEntity;
2323
import com.aries.library.fast.entity.FastTitleConfigEntity;
24+
import com.aries.library.fast.i.HttpErrorControl;
2425
import com.aries.library.fast.i.IFastTitleView;
2526
import com.aries.library.fast.i.IMultiStatusView;
2627
import com.aries.library.fast.i.LoadMoreFoot;
@@ -29,6 +30,7 @@
2930
import com.aries.library.fast.manager.GlideManager;
3031
import com.aries.library.fast.manager.LoggerManager;
3132
import com.aries.library.fast.retrofit.FastLoadingObserver;
33+
import com.aries.library.fast.retrofit.FastObserver;
3234
import com.aries.library.fast.util.FastUtil;
3335
import com.aries.library.fast.util.SizeUtil;
3436
import com.aries.library.fast.widget.FastLoadDialog;
@@ -152,6 +154,12 @@ public FastLoadDialog createLoadingDialog(@Nullable Activity activity) {
152154
.setMessage(getText(R.string.fast_loading));
153155
}
154156
});
157+
setHttpErrorControl(new HttpErrorControl() {
158+
@Override
159+
public boolean createHttpErrorControl(int errorRes, int errorCode, @NonNull Throwable e, Context con, Object[] args) {
160+
return false;
161+
}
162+
});
155163
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
156164
setContentViewBackgroundResource(-1);
157165
setSwipeBackEnable(false, null);
@@ -192,6 +200,11 @@ public FastLoadDialog createLoadingDialog(@Nullable Activity activity) {
192200
*/
193201
private LoadingDialog mLoadingDialog;
194202

203+
/**
204+
* 配置全局Http请求返回错误码处理
205+
*/
206+
private HttpErrorControl mHttpErrorControl;
207+
195208
public FastTitleConfigEntity getTitleConfig() {
196209
return mTitleConfig;
197210
}
@@ -359,6 +372,24 @@ public FastConfig setLoadingDialog(LoadingDialog mLoadingDialog) {
359372
return this;
360373
}
361374

375+
public HttpErrorControl getHttpErrorControl() {
376+
return mHttpErrorControl;
377+
}
378+
379+
/**
380+
* 全局设置Retrofit网络请求返回错误码提示
381+
* 最终调用{@link FastObserver#onError(Throwable)}
382+
*
383+
* @param mHttpErrorControl 观察者必须为FastObserver及其子类
384+
* @return
385+
*/
386+
public FastConfig setHttpErrorControl(HttpErrorControl mHttpErrorControl) {
387+
if (mHttpErrorControl != null) {
388+
this.mHttpErrorControl = mHttpErrorControl;
389+
}
390+
return this;
391+
}
392+
362393
/**
363394
* 设置加载图片占位图颜色
364395
*
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.aries.library.fast.i;
2+
3+
import android.content.Context;
4+
5+
import com.aries.library.fast.retrofit.FastError;
6+
import com.aries.library.fast.retrofit.FastObserver;
7+
8+
import io.reactivex.annotations.NonNull;
9+
10+
/**
11+
* Created: AriesHoo on 2017/11/16 11:04
12+
* E-Mail: AriesHoo@126.com
13+
* Function: 用于全局设置网络请求错误回调处理
14+
* Description:
15+
*/
16+
public interface HttpErrorControl {
17+
18+
/**
19+
* {@link FastObserver#_onError(int, int, Throwable)}
20+
*
21+
* @param errorRes 错误类型library里处理的错误Res资源
22+
* @param errorCode 错误码{@link FastError}
23+
* @param e Throwable 异常
24+
* @param context
25+
* @param args 初始化 {@link FastObserver#FastObserver(Context, Object...)}用作全局处理如
26+
* @return 返回true表示不再将结果传递_onError(reason, code, e)
27+
*/
28+
boolean createHttpErrorControl(int errorRes, int errorCode, @NonNull Throwable e,Context context, Object... args);
29+
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
/**
1111
* Created: AriesHoo on 2017/8/24 16:09
12+
* E-Mail: AriesHoo@126.com
1213
* Function: 快速创建支持Loading的Retrofit观察者
13-
* Desc:
14+
* Description:
15+
* 1、2017-11-16 13:38:16 AriesHoo增加多种构造用于实现父类全局设置网络请求错误码
1416
*/
1517
public abstract class FastLoadingObserver<T> extends FastObserver<T> {
1618

@@ -26,10 +28,15 @@ public FastLoadingObserver(@Nullable Activity activity) {
2628
this(FastConfig.getInstance(activity).getLoadingDialog().createLoadingDialog(activity));
2729
}
2830

29-
public FastLoadingObserver(FastLoadDialog dialog) {
31+
public FastLoadingObserver(FastLoadDialog dialog, Object[] args) {
32+
super(dialog.getDialog() != null ? dialog.getDialog().getContext() : null, args);
3033
this.mDialog = dialog;
3134
}
3235

36+
public FastLoadingObserver(FastLoadDialog dialog) {
37+
this(dialog, null);
38+
}
39+
3340
@Override
3441
public void onNext(T entity) {
3542
dismissProgressDialog();

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

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import android.accounts.AccountsException;
44
import android.accounts.NetworkErrorException;
55
import android.app.Activity;
6+
import android.content.Context;
67

8+
import com.aries.library.fast.FastConfig;
79
import com.aries.library.fast.R;
810
import com.aries.library.fast.util.FastStackUtil;
911
import com.aries.library.fast.util.NetworkUtil;
@@ -23,11 +25,28 @@
2325

2426
/**
2527
* Created: AriesHoo on 2017/8/24 9:56
26-
* Function:Retrofit快速观察者
27-
* Desc:
28+
* E-Mail: AriesHoo@126.com
29+
* Function: Retrofit快速观察者
30+
* Description: 1、2017-11-16 11:35:12 AriesHoo增加返回错误码全局控制
2831
*/
2932
public abstract class FastObserver<T> extends DefaultObserver<T> {
3033

34+
private Object[] mArgs;
35+
private Context mContext;
36+
37+
public FastObserver() {
38+
this(null);
39+
}
40+
41+
public FastObserver(Context context) {
42+
this(context, null);
43+
}
44+
45+
public FastObserver(Context context, Object[] args) {
46+
this.mArgs = args;
47+
this.mContext = context;
48+
}
49+
3150
@Override
3251
public void onComplete() {
3352

@@ -73,6 +92,11 @@ public void onError(Throwable e) {
7392
code = FastError.EXCEPTION_CLASS_CAST;
7493
}
7594
}
95+
if (mContext != null && FastConfig.getInstance(mContext).
96+
getHttpErrorControl().
97+
createHttpErrorControl(reason, code, e,mContext, mArgs)) {
98+
return;
99+
}
76100
_onError(reason, code, e);
77101
}
78102

@@ -83,5 +107,6 @@ public void onNext(T entity) {
83107

84108
public abstract void _onNext(@NonNull T entity);
85109

86-
public abstract void _onError(int errorRes, int errorCode, @NonNull Throwable e);
110+
public void _onError(int errorRes, int errorCode, @NonNull Throwable e) {
111+
}
87112
}

0 commit comments

Comments
 (0)