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;
 
    @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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值