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
- MVP框架实战Demo
- 【项目架构】Android MVP 和MVVM框架模式 学习实例Demo之mvp篇
- Mvp框架(完美实现P层剥离)+基类activity、fragment剥离 MVP demo
- mvp框架学习实战代码(配合retrofit+dagger2+rxjava)
- Okhttp3网络请求框架+MVP设计模式简单实战
- MVP框架
- mvp框架
- MVP框架
- MVP 模式编写刷新 Web Session 会话实例小Demo,实战代码,清晰明了,维护简单
- MVP简单demo
- [Asp.Net]MVP Demo
- android mvp demo
- Android MVP Demo
- MVP模式Demo
- 初识MVP,简单Demo
- MVP入门Demo
- Java框架JSON-RPC项目demo代码实战
- Java框架JSON-RPC项目demo代码实战
- RESTful服务最佳实践——(五)
- Android打印框架Demo
- Java内部类
- kjljljk
- 架构师成长之路——7个月成为一名架构师
- MVP框架实战Demo
- JAVA 快速排序
- BZOJ P4518征途
- JAVA 冒泡排序
- 学生管理系统
- 在O(1)时间复杂度删除链表节点-LintCode
- hdu 4391 分块哈希
- 欢迎使用CSDN-markdown编辑器
- 用C语言 将三个数从大到小排序