本文供自己查阅
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//find view
editUser = (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 listener
btnLogin.setOnClickListener(this);
btnClear.setOnClickListener(this);
//init
loginPresenter = new LoginPresenterCompl(this);
loginPresenter.setProgressBarVisiblity(View.INVISIBLE);
}
@Override
public 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;
}
}
@Override
public void onClearText() {
editUser.setText("");
editPass.setText("");
}
@Override
public 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));
}
else
Toast.makeText(this,"Login Fail, code = " + code,Toast.LENGTH_SHORT).show();
}
@Override
public 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());
}
@Override
public void clear() {
iLoginView.onClearText();
}
@Override
public void doLogin(String name, String passwd) {
client.get(url, new AsyncHttpResponseHandler() {
UserListBean userListBean = null;
@Override
public 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);
}
}
}
@Override
public 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 json
public String getLastLoginJson(Context context);
//解析json得到bean
public 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";
@Override
public 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();
}
@Override
public String getLastLoginJson(Context context) {
SharedPreferences spf = context.getSharedPreferences(
JSON_CACHE_PREF, Context.MODE_PRIVATE);
return spf.getString(KEY_LOGIN_JSON , null);
}
@Override
public 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;
}
}