MVP框架实战Demo

来源:互联网 发布:软件挖矿 编辑:程序博客网 时间:2024/05/22 17:14

最近一直在研究MVP设计模式,写了一个小练习,不足之处还望多多指教。

1.创建Presenter静态类

public abstract class BasePresenter {    public final static <V extends BaseModel> V CreateModel(Class<V> vClass){         V model = null;        try {            model = vClass.newInstance();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        }        return model;    }    public abstract void getLoadData(String id);    public abstract void loadDataFromDb();    final static ApiManger getLoadString(){        return ApiManger.getInstance();    }}

2.APiManger接口管理器

public class ApiManger {    private static String URL = "http://www.tngou.net";    private final TiGoutApi api;    public ApiManger(){        Retrofit.Builder builder = new Retrofit.Builder();        builder.baseUrl(URL).addConverterFactory(GsonConverterFactory.create())                .addConverterFactory(ScalarsConverterFactory.create());        api = builder.build().create(TiGoutApi.class);    }    private static class SingleTopHolder{        private static final ApiManger apiManger = new ApiManger();    }    public static ApiManger getInstance(){        return SingleTopHolder.apiManger;    }    public TiGoutApi getTGouService(){        return getInstance().api;    }}

3.创建model

public abstract class BaseModel<M> {    public M m;    abstract void saveDataResult(M dataResult);    abstract void loadFromDb(DataListener<M> listener);}

4.创建View

public interface BaseView<B> {    void getViewData(B dataResult);    void getDataFail(String string);}
5.数据监听器

public interface DataListener<T> {   void onComplete(T dataResult);}

6.分别创建Presenter 和Model的实现类

public class BasePresenterImp extends BasePresenter {    private final BaseModelImp baseModelImp;    private BaseView<HealthInfo> baseView;    public BasePresenterImp(BaseView<HealthInfo> baseView) {        baseModelImp = BasePresenter.CreateModel(BaseModelImp.class);        this.baseView = baseView;    }    @Override  public void getLoadData(String id) {        ApiManger apiManger = getLoadString();        TiGoutApi tGouService = apiManger.getTGouService();        Call<HealthInfo> healthInfo = tGouService.getHealthInfo("10");        healthInfo.enqueue(new Callback<HealthInfo>() {            @Override            public void onResponse(Call<HealthInfo> call, Response<HealthInfo> response) {                baseModelImp.saveDataResult(response.body());                baseView.getViewData(response.body());            }            @Override            public void onFailure(Call<HealthInfo> call, Throwable t) {               baseView.getDataFail("获取数据失败。。。");            }        });    }    @Override   public void loadDataFromDb() {        baseModelImp.loadFromDb(new DataListener<HealthInfo>() {            @Override            public void onComplete(HealthInfo dataResult) {                if (dataResult != null) {                    baseView.getViewData(dataResult);                }else {                    baseView.getDataFail("本地存储没有数据");                }            }        });    }}

public class BaseModelImp extends BaseModel<HealthInfo> {    @Override    void saveDataResult(HealthInfo dataResult) {        this.m = dataResult;    }    @Override    void loadFromDb(DataListener<HealthInfo> listener) {        listener.onComplete(this.m);    }}

7.数据接口

public interface TiGoutApi {    @GET("api/lore/show")    Call<HealthInfo> getHealthInfo(@Query("id") String id);    @GET("api/lore/classify")    Call<KnowledgeClass> getKnowledgeClassData();    @GET("api/cook/classify")    Call<CookClass> getCookClassData();}


最后在UI线程中调用Presenter





0 0
原创粉丝点击