流程图:

通过MVP终极抽取(上)让我们可以知道Model 的抽取。那么开始view ,presenter 的抽取 并且写了只要fragment 继承Smart 传入一个泛型参数<> 这个参数个数不定。 就可以进行网络获取 并且代码更简洁,更方便。
分包
创建IBaseVIew:
//在VIew 创建P 层
public interface IBaseView <P extends IBasePresenter>{
P createPresenter();
}
创建IBasePresenter:
//extends 最少也要继承一个IBaseView supper 上线
public interface IBasePresenter<V extends IBaseView> {
//绑定VIew
void bindView(V view);
//解绑VIew
void unBindView();
void cancelRequest();
}
创建BasePresenter:
public abstract class BasePresenter<V extends IBaseView> implements IBasePresenter<V> {
protected V mView;
@Override
public void bindView(V view) {
this.mView=view;
}
@Override
public void unBindView() {
this.mView=null;
}
}
创建BaseMVPFragment:
//创建MVPFragment 方法
public abstract class BaseMVPFragment<P extends IBasePresenter> extends BaseFragment implements IBaseView<P> ,BaseView {
//声明P层
protected P presenter;
private MvpLoadingView mLoadView;
//创建onCreate 方法 进行绑定
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
presenter = createPresenter();
presenter.bindView(this);
}
//创建解绑
@Override
public void onDestroyView() {
super.onDestroyView();
presenter.unBindView();
}
}
传入一个参数 (以泛型的形式)也就是bean类 进行一次网络数据的请求
创建IBaseSmartView1:
public interface IBaseSmartView1<D,P extends IBaseSmartPresenter1> extends IBaseView<P> {
//接受P层数据
void onResult1(MvpResponse<D> response);
}
创建IBaseSmartPresenter1:
public interface IBaseSmartPresenter1<D,V extends IBaseSmartView1<D,?>> extends IBasePresenter<V>{
//设置数据类型
void setType(Class<D> type);
//做请求方法
void doRequest(MvpRequest<D> request);
}
创建BaseSmartPresenter1:
public class BaseSmartPresenter1<D,V extends IBaseSmartView1<D,?>> extends BasePresenter<V> implements IBaseSmartPresenter1<D,V> {
//定义model 对象
protected IBaseModel model;
//创建切断
protected CompositeDisposable compositeDisposable;
//得到Type 实体类
protected Class<D> mType;
//得到model对象
public BaseSmartPresenter1(){
model=new BaseRepository();
}
//获取具体对象
@Override
public void setType(Class<D> type) {
mType=type;
}
//得到model层数据方法
@Override
public void doRequest(MvpRequest<D> request) {
//得到实体类
request.setType(mType);
model.doRequest(request, new IBaseCallBack<D>() {
@Override
public void onStart(Disposable disposable) {
handStart(disposable);
}
@Override
public void onResult(MvpResponse<D> response) {
if(mView != null){
mView.onResult1(response);
}
}
});
}
//切断网络数据
@Override
public void cancelRequest() {
if (compositeDisposable!=null){
compositeDisposable.dispose();
}
}
//添加
protected void handStart(Disposable d){
if (compositeDisposable==null){
compositeDisposable=new CompositeDisposable();
}
compositeDisposable.add(d);
}
}
创建BaseSmartFragment1:
public abstract class BaseSmartFragment1<D> extends BaseMVPFragment<BaseSmartPresenter1<D,?>> implements IBaseSmartView1<D, BaseSmartPresenter1<D,?>> {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//获取bean类
ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
Class<D> aClass = (Class<D>) superClass.getActualTypeArguments()[0];
presenter.setType(aClass);
}
public void doRequest(MvpRequest<D> request) {
presenter.doRequest(request);
}
@Override
public BaseSmartPresenter1<D,?> createPresenter() {
return new BaseSmartPresenter1<>();
}
}
传入两个参数(以泛型的形式) 两个bean 可以进行两次不同类型网络数据的请求
创建IBaseSmartView2:
public interface IBaseSmartView2<D1,D2,P extends IBaseSmartPresenter2<D1,D2,?>> extends IBaseSmartView1<D1,P> {
void onResult2(MvpResponse<D2> response);
}
创建IBaseSmartPresenter2:
public interface IBaseSmartPresenter2<D1,D2,V extends IBaseSmartView2<D1,D2,?>> extends IBaseSmartPresenter1<D1,V> {
void setType2(Class<D2> type);
void doRequest2(MvpRequest<D2> request);
}
创建BaseSmartPresenter2:
public class BaseSmartPresenter2 <D1,D2,V extends IBaseSmartView2<D1,D2,?>> extends BaseSmartPresenter1<D1,V>
implements IBaseSmartPresenter2<D1,D2,V> {
protected Class<D2> mType2;
@Override
public void setType2(Class<D2> type) {
mType2 = type;
}
@Override
public void doRequest2(MvpRequest<D2> request) {
mMode.doRequest(request, new IBaseCallBack<D2>() {
@Override
public void onStart(Disposable disposable) {
handStart(disposable);
}
@Override
public void onResult(MvpResponse<D2> response) {
if(mView != null){
mView.onResult2(response);
}
}
});
}
}
创建BaseSmartFragment2:
public abstract class BaseSmartFragment2<D1,D2> extends BaseMVPFragment<BaseSmartPresenter2<D1,D2,?>> implements IBaseSmartView2<D1,D2, BaseSmartPresenter2<D1,D2,?>>{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
Class<D1> aClass = (Class<D1>) superClass.getActualTypeArguments()[0];
Class<D2> aClass2 = (Class<D2>) superClass.getActualTypeArguments()[1];
presenter.setType(aClass);
presenter.setType2(aClass2);
}
protected void doRequest1(MvpRequest<D1> request){
presenter.doRequest(request);
}
protected void doRequest2(MvpRequest<D2> request){
presenter.doRequest2(request);
}
@Override
public BaseSmartPresenter2<D1, D2, ?> createPresenter() {
return new BaseSmartPresenter2<>();
}
}
传入三个参数(以泛型的形式) 三个bean 可以进行两次不同类型网络数据的请求
创建IBaseSmartView3:
public interface IBaseSmartView3<D1,D2,D3,P extends IBaseSmartPresenter3<D1,D2,D3,?>> extends IBaseSmartView2<D1,D2,P> {
void onResult3(MvpResponse<D3> response);
}
创建IBaseSmartPresenter3:
public interface IBaseSmartPresenter3<D1,D2,D3,V extends IBaseSmartView3<D1,D2,D3,?>> extends IBaseSmartPresenter2<D1,D2,V> {
void setType3(Class<D3> type);
void doRequest3(MvpRequest<D3> request);
}
创建BaseSmartPresenter3:
public class BaseSmartPresenter3<D1,D2,D3,V extends IBaseSmartView3<D1,D2,D3,?>>
extends BaseSmartPresenter2<D1,D2,V>
implements IBaseSmartPresenter3<D1,D2,D3,V> {
protected Class<D3> mType3;
@Override
public void setType3(Class<D3> type) {
mType3 = type;
}
@Override
public void doRequest3(MvpRequest<D3> request) {
mMode.doRequest(request, new IBaseCallBack<D3>() {
@Override
public void onStart(Disposable disposable) {
handStart(disposable);
}
@Override
public void onResult(MvpResponse<D3> response) {
if(mView != null){
mView.onResult3(response);
}
}
});
}
}
创建BaseSmartFragment3:
public abstract class BaseSmartFragment3<D1,D2,D3> extends BaseMVPFragment<BaseSmartPresenter3<D1,D2,D3,?>> implements IBaseSmartView3<D1,D2,D3, BaseSmartPresenter3<D1,D2,D3,?>>{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
Class<D1> aClass = (Class<D1>) superClass.getActualTypeArguments()[0];
Class<D2> aClass2 = (Class<D2>) superClass.getActualTypeArguments()[1];
Class<D3> aClass3 = (Class<D3>) superClass.getActualTypeArguments()[2];
presenter.setType(aClass);
presenter.setType2(aClass2);
presenter.setType3(aClass3);
}
protected void doRequest1(MvpRequest<D1> request){
presenter.doRequest(request);
}
protected void doRequest2(MvpRequest<D2> request){
presenter.doRequest2(request);
}
protected void doRequest3(MvpRequest<D3> request){
presenter.doRequest3(request);
}
@Override
public BaseSmartPresenter3<D1, D2,D3, ?> createPresenter() {
return new BaseSmartPresenter3<>();
}
}
Smart 的使用:
public class RegisterFragment extends BaseSmartFragment1<ColumnData> {
private TextView text;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
GetRequest getRequest = new GetRequest("/api/column/columnmanagelist");
HashMap<String, Object> commonParams = ParamsUtils.getCommonParams();
getRequest.setParams(commonParams);
doRequest(getRequest);
}
@Override
protected void initView() {
text = findViewById(R.id.text_c);
}
@Override
protected int getLayout() {
return R.layout.layout_fragment2;
}
@Override
public void onResult1(MvpResponse<ColumnData> response) {
ColumnData data = response.getData();
ColumnData.ColumnInfo list = data.getList();
ArrayList<ColumnData.Column> myColumn = list.getMyColumn();
String name = myColumn.get(0).getName();
Log.d("EEEEEEEEE","eeeeeeeeeee"+data.toString()+name);
text.setText(name);
}
@Override
public IBasePresenter getPresenter() {
return presenter;
}
}
网友评论