本文供自己查阅
android MVP模式结构代码。
model层包含:
IUser接口(定义model功能,数据json解析,从缓存获取数据,从数据库获取数据等,相当于MVC的DAO层),UserModel实现Iuser接口(model功能的具体实现代码),BaseBean(bean父类),UserBean(数据封装bean),UserListBean(数据封装bean List,该类继承BaseBean)

presenter层包含:
ILoginPersenter接口(定义业务逻辑功能,登录、注册、从网络获取数据等)
LoginPersenterComl类实现ILoginPersenter接口(具体的业务逻辑代码)

View层包含:
ILoginView接口(定义界面逻辑功能,一切操作UI的功能,该接口的方法必须在MAIN线程执行)
LoginActivity类实现ILoginView接口(具体的界面逻辑功能代码实现,响应用户输入输出,生命周期管理,实例化控件等)

以下代码例子中以登录为业务场景,但是数据返回user集合,虽然不符合正常登录业务,但是不影响模拟MVP模式

LoginActivity 界面:

    public class LoginActivity extends ActionBarActivity implements ILoginView, View.OnClickListener {private EditText editUser;private EditText editPass;private Button   btnLogin;private Button   btnClear;ILoginPresenter loginPresenter;private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//find vieweditUser = (EditText) this.findViewById(R.id.et_login_username);editPass = (EditText) this.findViewById(R.id.et_login_password);btnLogin = (Button) this.findViewById(R.id.btn_login_login);btnClear = (Button) this.findViewById(R.id.btn_login_clear);progressBar = (ProgressBar) this.findViewById(R.id.progress_login);//set listenerbtnLogin.setOnClickListener(this);btnClear.setOnClickListener(this);//initloginPresenter = new LoginPresenterCompl(this);loginPresenter.setProgressBarVisiblity(View.INVISIBLE);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn_login_clear:loginPresenter.clear();break;case R.id.btn_login_login:loginPresenter.setProgressBarVisiblity(View.VISIBLE);btnLogin.setEnabled(false);btnClear.setEnabled(false);loginPresenter.doLogin(editUser.getText().toString(), editPass.getText().toString());break;}}@Overridepublic void onClearText() {editUser.setText("");editPass.setText("");}@Overridepublic void onLoginResult(int code) {loginPresenter.setProgressBarVisiblity(View.INVISIBLE);btnLogin.setEnabled(true);btnClear.setEnabled(true);if (code == 1){Toast.makeText(this,"Login Success",Toast.LENGTH_SHORT).show();startActivity(new Intent(this, HomeActivity.class));}elseToast.makeText(this,"Login Fail, code = " + code,Toast.LENGTH_SHORT).show();}@Overridepublic void onSetProgressBarVisibility(int visibility) {progressBar.setVisibility(visibility);}
}

ILoginView 接口:

public interface ILoginView {public void onClearText();public void onLoginResult(Boolean result, int code);public void onSetProgressBarVisibility(int visibility);
}

ILoginPresenter接口:

public interface ILoginPresenter {void clear();void doLogin(String name, String passwd);void setProgressBarVisiblity(int visiblity);
}

LoginPresenterCompl 为接口ILoginPresenter的实现类

public class LoginPresenterCompl implements ILoginPresenter {ILoginView iLoginView;IUser user;Handler    handler;public LoginPresenterCompl(ILoginView iLoginView) {this.iLoginView = iLoginView;initUser();handler = new Handler(Looper.getMainLooper());}@Overridepublic void clear() {iLoginView.onClearText();}@Overridepublic void doLogin(String name, String passwd) {client.get(url, new AsyncHttpResponseHandler() {UserListBean userListBean = null;@Overridepublic void onSuccess(String response) {userListBean = user.getLoginBean(response);if(userListBean != null && userListBean .recode == Constant.REQUEST_SUCCESS){user.setLastLoginJson(mContext.getApplicationContext(), response);}else{userListBean = user.getLoginBean(user.getLastLoginJson(mContext));}if(userListBean != null && userListBean .recode == Constant.REQUEST_SUCCESS){iLoginView.onLoginResult(userListBean.recode);}else{iLoginView.onLoginResult(0);}}}@Overridepublic void setProgressBarVisiblity(int visiblity){iLoginView.onSetProgressBarVisibility(visiblity);}private void initUser(){user = new UserModel();}
}

BaseBean基类:

public class BaseBean {public int recode;public String msg;
}

UserBean类:

class UserBean{public String name;public String number;
}class UserListBean extend BaseBean {public List<UserBean> list = new ArrayList<UserBean>();}

IUser接口:

public interface IUser{//缓存上一次有效的json返回结果public void setLastLoginJson(Context context, String value);//获取上一次缓存的login jsonpublic String getLastLoginJson(Context context);//解析json得到beanpublic BannerBean getLoginBean(String json);
}

IUser接口实现类UserModel:

class UserModel implements IUser{private static final String JSON_CACHE_PREF =Constant.JSON_CACHE_SHAREDPREFERENCE_NAME;private static final String KEY_LOGIN_JSON = "loginJson";@Overridepublic void setLastLoginJson(Context context, String value) {SharedPreferences spf = context.getSharedPreferences(JSON_CACHE_PREF, Context.MODE_PRIVATE);Editor editor = spf.edit();editor.putString(KEY_LOGIN_JSON , value);editor.commit();}@Overridepublic String getLastLoginJson(Context context) {SharedPreferences spf = context.getSharedPreferences(JSON_CACHE_PREF, Context.MODE_PRIVATE);return spf.getString(KEY_LOGIN_JSON , null);}@Overridepublic UserListBean getLoginBean(String json) {UserListBean userListBean= new UserListBean();try{JSONObject jobj = new JSONObject(json);bean.recode = jobj.optInt("result");bean.msg = jobj.optString("msg");if(bean.recode == Constant.REQUEST_FAIL){return bean;}JSONArray jarrchildren = jobj.getJSONArray("content");for(int i = 0; i < jarrchildren.length(); i++){UserBeanitem = new UserBean();JSONObject jobjitem = jarrchildren.getJSONObject(i);item.name = jobjitem.optString("name");item.number = jobjitem.optString("number");userListBean.list.add(item);}}catch(Exception e){return null;}return userListBean;}
}

android:MPV相关推荐

  1. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第二章 深入理解Netd

    原文: http://blog.csdn.net/innost/article/details/20400389 本文使用的源码版本为Android5.1 本章主要内容 介绍Netd; 介绍MDNS和 ...

  2. Android:解决Gradle DSL method not found: 'runProguard()' 问题

    已入github上的android开源项目出现Android:Gradle DSL method not found: 'runProguard()' 在新版本的gradle中,runProguard ...

  3. 超越Android:Kotlin在后端的工作方式

    by Adam Arold 亚当·阿罗德(Adam Arold) 超越Android:Kotlin在后端的工作方式 (Going Beyond Android: how Kotlin works on ...

  4. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  5. Android:dagger2让你爱不释手-基础依赖注入框架篇

    前言 dagger2的大名我想大家都已经很熟了,它是解决Android或java中依赖注入的一个类库(DI类库).当我看到一些开源的项目在使用dagger2时,我也有种匆匆欲动的感觉,因此就立马想一探 ...

  6. android无法实例化服务,Android:无法实例化类:没有空的构造函数

    请看下面,我得到一个无法实例化类:当试图运行我的"HomeFragmentListExpand"类时,LogCat中没有空的构造函数错误,即使我清楚地有一个空的构造函数那里.And ...

  7. 《深入理解Android:卷III A》一一2.4本章小结

    本节书摘来华章计算机出版社<深入理解Android:卷III A>一书中的第2章,第2.4节,作者:张大伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2 ...

  8. android纯白背景加灰,Android背景颜色设置为灰色而不是@android:颜色/白色

    在我的应用程序中,所有背景设置为@background ="@ android:color / white"的视图都在除三星Galaxy S3 mini之外的所有设备上正确显示.在 ...

  9. 《深入理解Android:卷III A》一一2.3心系两界的MessageQueue

    本节书摘来华章计算机出版社<深入理解Android:卷III A>一书中的第2章,第2.3节,作者:张大伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2 ...

最新文章

  1. 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇...
  2. Linux-man命令
  3. linux oracle查询乱码问题,Linux环境Oracle显示乱码的解决方法
  4. ssh端口映射,本地转发
  5. C++成员函数中的const修饰符
  6. HBuilder 模拟器连接默认端口
  7. python的可变参数 *args 和关键字参数**kw
  8. 再回首Java第十一天
  9. 如何快速理解递归——看这个就可以了
  10. C++内联函数(inline function)
  11. leetcode双指针(python与c++)
  12. LVS+Keepalived实现负载均衡高可用
  13. 深度之眼-科赛网二分类大赛入门之路
  14. 利用Lua脚本语言制作魔兽WOW插件
  15. c语言if语句判断ab大小,C语言条件语句ifppt课件
  16. APUE 第四章总结
  17. 生物医学信号处理之数字信号处理基础
  18. 系统分析与设计方法---面向对象的分析与设计
  19. 深度学习目标检测之SSD网络(超级详细)
  20. 数学分析教程(科大)——5.1笔记+习题

热门文章

  1. 【Breeze】常用方法
  2. 百度百科计算机科学与技术,计算机科学与技术学科联考计算机学科专业基
  3. Unity Shader-后处理:时空扭曲效果
  4. (个人)AR电子书系统创新实训第三周(2)
  5. Python快递计费系统(简易)
  6. 连接局域网中计算机与传输介质的网络设备是,局域网传输介质与连接设备.PPT...
  7. 使用threejs实现VR看房效果,仿贝壳找房VR看房
  8. U盘(优盘)数据恢复
  9. linux服务器巡检脚本shell
  10. 苹果开发者帐号(Company)申请流程(一)