1
- ###MVCHelper更倾向于获取数据并显示数据,比较适用于http的get请求 。
1
+ ###MVCHelper主要用于下拉刷新加载,失败,加载,空数据,成功的界面切换 。
2
2
3
- ###TaskHelper更倾向于任务的执行的失败,成功,取消,比较适用于http的post请求
3
+ ###TaskHelper主要用于执行动作然后回调
4
4
5
5
# Gradle导入 #
6
6
## 1.必须导入: ##
7
7
8
8
//MVCHelper核心类库
9
- compile 'com.shizhefei:MVCHelper-Library:1.0.4 '
9
+ compile 'com.shizhefei:MVCHelper-Library:1.0.6 '
10
10
//里面有使用recyclerview,所以需要导入recyclerview
11
11
compile 'com.android.support:recyclerview-v7:24.0.0'
12
12
13
13
## 2.可选: ##
14
14
<1> 使用 https://github.com/chrisbanes/Android-PullToRefresh 的刷新控件导入
15
15
16
16
//里面包含一个MVCPullrefshHelper 是适配这个控件的 MVCHelper
17
- compile 'com.shizhefei:MVCHelper-Pullrefresh:1.0.4 '
17
+ compile 'com.shizhefei:MVCHelper-Pullrefresh:1.0.6 '
18
18
//由于没有找到gradle排至,我自己把它上传到jcenter上
19
19
compile 'com.shizhefei:pulltorefresh:1.0.1'
20
20
21
21
<2> 使用 https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh 的刷新控件导入
22
22
23
23
//里面包含一个MVCUltraHelper 是适配这个控件的 MVCHelper
24
- compile 'com.shizhefei:MVCHelper-UltraRefresh:1.0.4 '
24
+ compile 'com.shizhefei:MVCHelper-UltraRefresh:1.0.6 '
25
25
//这里6月29号目前最新的,要实时关注新版本去秋大的网站上去看
26
26
compile 'in.srain.cube:ultra-ptr:1.0.11'
27
27
28
28
<3> 使用android v4的SwipeRefreshLayout的作为刷新控件导入
29
29
30
30
//里面包含一个MVCSwipeRefreshHelper 是适配这个控件的 MVCHelper
31
- compile 'com.shizhefei:MVCHelper-SwipeRefresh:1.0.4 '
31
+ compile 'com.shizhefei:MVCHelper-SwipeRefresh:1.0.6 '
32
32
//v4包应该都有导入吧,v7包里面包含v4包
33
33
compile 'com.android.support:support-v4:24.0.0'
34
34
35
35
<4> 测试用例,可以方便的查看MVCHelper,Task的运行情况和返回数据,还提供了修改接口字段,用于接口测试很方便哦
36
36
37
37
//MVCHelper的测试用例,继承ABSTestCaseFragment实现List<TestCaseData> getTestCaseDatas()方法
38
- compile 'com.shizhefei:MVCHelper-TestCase:1.0.4 '
38
+ compile 'com.shizhefei:MVCHelper-TestCase:1.0.6 '
39
39
//里面用到了gson
40
40
compile 'com.google.code.gson:gson:2.2.4'
41
41
42
42
<5> MVCHelper-OkHttp 对OKHttp的简单封装
43
43
44
44
//MVCHelper的 OKHttp的简单封装
45
- compile 'com.shizhefei:MVCHelper-OkHttp:1.0.5 '
45
+ compile 'com.shizhefei:MVCHelper-OkHttp:1.0.6 '
46
46
//里面用到了okhttp3
47
47
compile 'com.squareup.okhttp3:okhttp:3.4.0'
48
48
compile 'com.squareup.okio:okio:1.9.0'
51
51
#一、 MVCHelper
52
52
MVCHelper. 实现下拉刷新,滚动底部自动加载更多,分页加载,自动切换显示网络失败布局,暂无数据布局,,真正的MVC架构.
53
53
Download Library [ JAR] ( https://github.com/LuckyJayce/MVCHelper/releases/download/1.0.2/LuckyJayce_MVCHelper_1.0.2.zip )
54
- Download sample [ Apk] ( https://github.com/LuckyJayce/MVCHelper/blob/mastear /raw/MVCHelper_Demo.apk?raw=true )
54
+ Download sample [ Apk] ( https://github.com/LuckyJayce/MVCHelper/blob/master /raw/MVCHelper_Demo.apk?raw=true )
55
55
56
56
## 1.Model (IDataSource<DATA >)数据源,加载数据
57
57
** 同步请求实现IDataSource,异步请求(okhttp,volley)实现IAsyncDataSource**
@@ -356,14 +356,15 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
356
356
}
357
357
358
358
#二、 TaskHelper
359
- ## 1.Model (Task<SUCCESS, FAIL>)
359
+ ## 1.Model (ITask<DATA >, IAsyncTask<DATA >)
360
+
361
+ ** 同步请求实现Task,异步请求(okhttp,volley)实现IAsyncTask**
362
+
360
363
/**
361
- * @param <SUCCESS>
362
- * 成功的数据类型
363
- * @param <FAIL>
364
- * 失败的数据类型
364
+ * @param <DATA>
365
+ * 数据类型
365
366
*/
366
- public interface Task<SUCCESS, FAIL > {
367
+ public interface Task<DATA > {
367
368
368
369
/**
369
370
* 执行后台任务
@@ -373,18 +374,29 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
373
374
* @return
374
375
* @throws Exception
375
376
*/
376
- public Data<SUCCESS, FAIL> execute(ProgressSender progressSender) throws Exception;
377
+ public DATA execute(ProgressSender progressSender) throws Exception;
377
378
378
379
/**
379
- * 注意cancle 和 execute 有可能不在同一个线程,cancle可能在UI线程被调用
380
+ * cancel 和 execute 有可能不在同一个线程,cancle可能在UI线程被调用
380
381
*/
381
- public void cancle ();
382
+ public void cancel ();
382
383
383
384
}
384
385
386
+ public interface IAsyncTask<DATA> extends ISuperTask<DATA> {
387
+
388
+ /**
389
+ * @param sender 用于请求结束时发送数据给TaskHelper,MVCHelper,然后在通知CallBack的Post回调方法
390
+ * @return 用于提供外部取消请求的处理
391
+ * @throws Exception
392
+ */
393
+ RequestHandle execute(ResponseSender<DATA> sender) throws Exception;
394
+
395
+ }
396
+
385
397
例如登陆
386
398
387
- public class LoginTask implements Task<User, String > {
399
+ public class LoginTask implements Task<User> {
388
400
private String name;
389
401
private String password;
390
402
@@ -395,12 +407,12 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
395
407
}
396
408
397
409
@Override
398
- public Data< User, String> execute(ProgressSender progressSender) throws Exception {
410
+ public User execute(ProgressSender progressSender) throws Exception {
399
411
if (name.equals("aaa") && password.equals("111")) {
400
- return Data.madeSuccess( new User("1", "aaa", 23, "中国人") );
401
- } else {
402
- return Data.madeFail ("用户名或者密码不正确");
403
- }
412
+ return new User("1", "aaa", 23, "中国人");
413
+ } else {
414
+ throw new BizException ("用户名或者密码不正确");
415
+ }
404
416
}
405
417
406
418
@Override
@@ -409,20 +421,18 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
409
421
}
410
422
411
423
}
412
- ## 2.View(Callback<SUCCESS, FAIL >)
424
+ ## 2.View(ICallback< DATA >)
413
425
/**
414
426
*
415
- * @param <SUCCESS>
416
- * 执行成功返回的数据类型
417
- * @param <FAIL>
418
- * 执行失败返回的数据类型
427
+ * @param <DATA>
428
+ * 数据类型
419
429
*/
420
- public interface Callback<SUCCESS, FAIL > {
430
+ public interface ICallback<DATA > {
421
431
422
432
/**
423
433
* 执行task之前的回调
424
434
*/
425
- public void onPreExecute();
435
+ public void onPreExecute(Object task );
426
436
427
437
/**
428
438
* 进度更新回调
@@ -432,7 +442,7 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
432
442
* @param total
433
443
* @param exraData
434
444
*/
435
- public void onProgressUpdate(int percent, long current, long total, Object exraData);
445
+ public void onProgressUpdate(Object task, int percent, long current, long total, Object exraData);
436
446
437
447
/**
438
448
* 执行task结束的回调,通过code判断是什么情况结束task,(成功,失败,异常,取消)
@@ -441,61 +451,70 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
441
451
* 返回码
442
452
* @param exception
443
453
* 异常信息(throw exception 时才有值)
444
- * @param success
445
- * 成功返回的数据
446
- * @param fail
447
- * 失败返回的数据
454
+ * @param data
455
+ * 返回的数据
448
456
*/
449
- public void onPostExecute(Code code, Exception exception, SUCCESS success, FAIL fail );
457
+ public void onPostExecute(Object task, Code code, Exception exception, DATA data );
450
458
451
459
}
452
460
453
461
例如登陆请求更新UI
454
462
455
- private Callback<User, String> loginCallback = new Callback<User, String>() {
456
- @Override
457
- public void onPreExecute() {
458
- loginButton.setEnabled(false);
459
- loginButton.setText("登陆中...");
460
- }
461
-
462
- @Override
463
- public void onProgressUpdate(int percent, long current, long total, Object exraData) {
464
-
465
- }
466
-
467
- @Override
468
- public void onPostExecute(Code code, Exception exception, User success, String fail) {
469
- loginButton.setEnabled(true);
470
- loginButton.setText("登陆");
471
- switch (code) {
472
- case FAIL:
473
- case EXCEPTION:
474
- if (TextUtils.isEmpty(fail)) {
475
- Toast.makeText(getApplicationContext(), "网络连接失败", Toast.LENGTH_SHORT).show();
476
- } else {
477
- Toast.makeText(getApplicationContext(), fail, Toast.LENGTH_SHORT).show();
478
- }
479
- break;
480
- case SUCESS:
481
- Toast.makeText(getApplicationContext(), "登陆成功:" + new Gson().toJson(success), Toast.LENGTH_LONG).show();
482
- break;
483
- default:
484
- break;
485
- }
486
- }
487
- };
463
+ private ICallback<User> loginCallback = new ICallback<User>() {
464
+ @Override
465
+ public void onPreExecute(Object task) {
466
+ loginButton.setEnabled(false);
467
+ loginButton.setText("登陆中...");
468
+ }
469
+
470
+ @Override
471
+ public void onProgress(Object task, int percent, long current, long total, Object extraData) {
472
+
473
+ }
474
+
475
+ @Override
476
+ public void onPostExecute(Object task, Code code, Exception exception, User user) {
477
+ loginButton.setEnabled(true);
478
+ loginButton.setText("登陆");
479
+ switch (code) {
480
+ case EXCEPTION:
481
+ if (exception instanceof BizException) {
482
+ BizException bizException = (BizException) exception;
483
+ String fail = bizException.getMessage();
484
+ Toast.makeText(getApplicationContext(), fail, Toast.LENGTH_SHORT).show();
485
+ textView.setText(fail);
486
+ } else {
487
+ Toast.makeText(getApplicationContext(), "网络连接失败", Toast.LENGTH_SHORT).show();
488
+ textView.setText("网络连接失败");
489
+ }
490
+ break;
491
+ case SUCCESS:
492
+ Toast.makeText(getApplicationContext(), "登陆成功:" + new Gson().toJson(user), Toast.LENGTH_LONG).show();
493
+ textView.setText("登陆成功:" + new Gson().toJson(user));
494
+ break;
495
+ default:
496
+ break;
497
+ }
498
+ }
499
+ };
488
500
489
501
## 3.Controller (Activity,Fragment,TaskHelper)
490
502
491
503
Activity负责调度,代码如下
492
-
493
- loginHelper.setTask(new LoginTask(name, password));
494
- loginHelper.setCallback(loginCallback);
495
- loginHelper.execute();
496
504
497
- //loginHelper.cancle();//执行取消操作
498
- //loginHelper.destory();//执行释放操作
505
+ TaskHelper<Object> taskHelper = new TaskHelper<>();
506
+
507
+ //注册TaskHelper的callback,所有通过taskHelpe执行的task,都会回调它.
508
+ //taskHelper.registerCallBack(loginCallback);
509
+
510
+ TaskHandle taskHandle = taskHelper.execute(new LoginAsyncTask(name, password), loginCallback);
511
+ //TaskHelper 可以执行多个task,TaskHandle对应执行的task,可以执行cancel,对单个task取消
512
+ TaskHandle taskHandle2 = taskHelper.execute(new LoginAsyncTask(name, password), loginCallback);
513
+
514
+ //taskHandle.cancel();//执行取消操作
515
+
516
+ //taskHelper.destory();//执行释放操作
517
+ //taskHelper.cancelAll();//取消全部
499
518
500
519
## 注意:
501
520
1.权限:
0 commit comments