android:MPV
本文供自己查阅
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 list = new ArrayList();}
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;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
