Skip to content

Commit 71588bb

Browse files
committed
1.0.6
1 parent e38d16b commit 71588bb

File tree

4 files changed

+102
-77
lines changed

4 files changed

+102
-77
lines changed

README.md

+95-76
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
1-
###MVCHelper更倾向于获取数据并显示数据,比较适用于http的get请求
1+
###MVCHelper主要用于下拉刷新加载,失败,加载,空数据,成功的界面切换
22

3-
###TaskHelper更倾向于任务的执行的失败,成功,取消,比较适用于http的post请求
3+
###TaskHelper主要用于执行动作然后回调
44

55
# Gradle导入 #
66
## 1.必须导入: ##
77

88
//MVCHelper核心类库
9-
compile 'com.shizhefei:MVCHelper-Library:1.0.4'
9+
compile 'com.shizhefei:MVCHelper-Library:1.0.6'
1010
//里面有使用recyclerview,所以需要导入recyclerview
1111
compile 'com.android.support:recyclerview-v7:24.0.0'
1212

1313
## 2.可选: ##
1414
<1> 使用 https://github.com/chrisbanes/Android-PullToRefresh 的刷新控件导入
1515

1616
//里面包含一个MVCPullrefshHelper 是适配这个控件的 MVCHelper
17-
compile 'com.shizhefei:MVCHelper-Pullrefresh:1.0.4'
17+
compile 'com.shizhefei:MVCHelper-Pullrefresh:1.0.6'
1818
//由于没有找到gradle排至,我自己把它上传到jcenter上
1919
compile 'com.shizhefei:pulltorefresh:1.0.1'
2020

2121
<2> 使用 https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh 的刷新控件导入
2222

2323
//里面包含一个MVCUltraHelper 是适配这个控件的 MVCHelper
24-
compile 'com.shizhefei:MVCHelper-UltraRefresh:1.0.4'
24+
compile 'com.shizhefei:MVCHelper-UltraRefresh:1.0.6'
2525
//这里6月29号目前最新的,要实时关注新版本去秋大的网站上去看
2626
compile 'in.srain.cube:ultra-ptr:1.0.11'
2727

2828
<3> 使用android v4的SwipeRefreshLayout的作为刷新控件导入
2929

3030
//里面包含一个MVCSwipeRefreshHelper 是适配这个控件的 MVCHelper
31-
compile 'com.shizhefei:MVCHelper-SwipeRefresh:1.0.4'
31+
compile 'com.shizhefei:MVCHelper-SwipeRefresh:1.0.6'
3232
//v4包应该都有导入吧,v7包里面包含v4包
3333
compile 'com.android.support:support-v4:24.0.0'
3434

3535
<4> 测试用例,可以方便的查看MVCHelper,Task的运行情况和返回数据,还提供了修改接口字段,用于接口测试很方便哦
3636

3737
//MVCHelper的测试用例,继承ABSTestCaseFragment实现List<TestCaseData> getTestCaseDatas()方法
38-
compile 'com.shizhefei:MVCHelper-TestCase:1.0.4'
38+
compile 'com.shizhefei:MVCHelper-TestCase:1.0.6'
3939
//里面用到了gson
4040
compile 'com.google.code.gson:gson:2.2.4'
4141

4242
<5> MVCHelper-OkHttp 对OKHttp的简单封装
4343

4444
//MVCHelper的 OKHttp的简单封装
45-
compile 'com.shizhefei:MVCHelper-OkHttp:1.0.5'
45+
compile 'com.shizhefei:MVCHelper-OkHttp:1.0.6'
4646
//里面用到了okhttp3
4747
compile 'com.squareup.okhttp3:okhttp:3.4.0'
4848
compile 'com.squareup.okio:okio:1.9.0'
@@ -51,7 +51,7 @@
5151
#一、 MVCHelper
5252
MVCHelper. 实现下拉刷新,滚动底部自动加载更多,分页加载,自动切换显示网络失败布局,暂无数据布局,,真正的MVC架构.
5353
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)
5555

5656
## 1.Model (IDataSource<DATA>)数据源,加载数据
5757
**同步请求实现IDataSource,异步请求(okhttp,volley)实现IAsyncDataSource**
@@ -356,14 +356,15 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
356356
}
357357

358358
#二、 TaskHelper
359-
## 1.Model (Task<SUCCESS, FAIL>)
359+
## 1.Model (ITask<DATA>, IAsyncTask<DATA>)
360+
361+
**同步请求实现Task,异步请求(okhttp,volley)实现IAsyncTask**
362+
360363
/**
361-
* @param <SUCCESS>
362-
* 成功的数据类型
363-
* @param <FAIL>
364-
* 失败的数据类型
364+
* @param <DATA>
365+
* 数据类型
365366
*/
366-
public interface Task<SUCCESS, FAIL> {
367+
public interface Task<DATA> {
367368

368369
/**
369370
* 执行后台任务
@@ -373,18 +374,29 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
373374
* @return
374375
* @throws Exception
375376
*/
376-
public Data<SUCCESS, FAIL> execute(ProgressSender progressSender) throws Exception;
377+
public DATA execute(ProgressSender progressSender) throws Exception;
377378

378379
/**
379-
* 注意cancle 和 execute 有可能不在同一个线程,cancle可能在UI线程被调用
380+
* cancel 和 execute 有可能不在同一个线程,cancle可能在UI线程被调用
380381
*/
381-
public void cancle();
382+
public void cancel();
382383

383384
}
384385

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+
385397
例如登陆
386398

387-
public class LoginTask implements Task<User, String> {
399+
public class LoginTask implements Task<User> {
388400
private String name;
389401
private String password;
390402

@@ -395,12 +407,12 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
395407
}
396408

397409
@Override
398-
public Data<User, String> execute(ProgressSender progressSender) throws Exception {
410+
public User execute(ProgressSender progressSender) throws Exception {
399411
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+
}
404416
}
405417

406418
@Override
@@ -409,20 +421,18 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
409421
}
410422

411423
}
412-
## 2.View(Callback<SUCCESS, FAIL>)
424+
## 2.View(ICallback<DATA>)
413425
/**
414426
*
415-
* @param <SUCCESS>
416-
* 执行成功返回的数据类型
417-
* @param <FAIL>
418-
* 执行失败返回的数据类型
427+
* @param <DATA>
428+
* 数据类型
419429
*/
420-
public interface Callback<SUCCESS, FAIL> {
430+
public interface ICallback<DATA> {
421431

422432
/**
423433
* 执行task之前的回调
424434
*/
425-
public void onPreExecute();
435+
public void onPreExecute(Object task);
426436

427437
/**
428438
* 进度更新回调
@@ -432,7 +442,7 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
432442
* @param total
433443
* @param exraData
434444
*/
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);
436446

437447
/**
438448
* 执行task结束的回调,通过code判断是什么情况结束task,(成功,失败,异常,取消)
@@ -441,61 +451,70 @@ MVCHelper.setLoadViewFractory(new LoadViewFractory());
441451
* 返回码
442452
* @param exception
443453
* 异常信息(throw exception 时才有值)
444-
* @param success
445-
* 成功返回的数据
446-
* @param fail
447-
* 失败返回的数据
454+
* @param data
455+
* 返回的数据
448456
*/
449-
public void onPostExecute(Code code, Exception exception, SUCCESS success, FAIL fail);
457+
public void onPostExecute(Object task,Code code, Exception exception, DATA data);
450458

451459
}
452460

453461
例如登陆请求更新UI
454462

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+
};
488500

489501
## 3.Controller (Activity,Fragment,TaskHelper)
490502

491503
Activity负责调度,代码如下
492-
493-
loginHelper.setTask(new LoginTask(name, password));
494-
loginHelper.setCallback(loginCallback);
495-
loginHelper.execute();
496504

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();//取消全部
499518

500519
## 注意:
501520
1.权限:

app/src/main/java/com/shizhefei/test/controllers/task/LoginActivity.java

-1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,5 @@ public void onPostExecute(Object task, Code code, Exception exception, User user
9999
break;
100100
}
101101
}
102-
103102
};
104103
}

mvchelper_library/src/main/java/com/shizhefei/task/IAsyncTask.java

+7
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,12 @@
88
* Created by LuckyJayce on 2016/7/17.
99
*/
1010
public interface IAsyncTask<DATA> extends ISuperTask<DATA> {
11+
12+
/**
13+
* @param sender 用于请求结束时发送数据给TaskHelper,MVCHelper,然后在通知CallBack的Post回调方法
14+
* @return 用于提供外部取消请求的处理
15+
* @throws Exception
16+
*/
1117
RequestHandle execute(ResponseSender<DATA> sender) throws Exception;
18+
1219
}

raw/MVCHelper_Demo.apk

1.39 MB
Binary file not shown.

0 commit comments

Comments
 (0)