Android MVP模式下的登陸實現

項目結構:java

package com.example.mvpdemo.view;

/**
 *    基本的頁面操做 
 *
 */
public interface IBaseView {
    //Toast形式提示
    public void showMsg(String msg);
    //加載提示框
    public void    showLoading();
    //隱藏加載提示框
    public void hiddenLoading();
    //頁面跳轉
    public void jumpActivity();
    //返回
    public boolean back();
}
package com.example.mvpdemo.view;

/**
 *    登錄界面的View,繼承基本的IBaseView,IBaseView對於Login界面操做已經足夠,因此沒有實質內容 
 *
 */
public interface ILoginView extends IBaseView {

}
package com.example.mvpdemo.model;
/**
 * 最基本的模型
 *
 */
public interface IBaseModel {
    public static final int STATUS_FAIL = -1;// 驗證失敗
    public static final int STATUS_SUCCESS = 0;// 成功
    public static final int STATUS_NORMAL = 1;// 正常狀態
    public static final int STATUS_VERIFY_ING = 2;// 正常狀態
}
package com.example.mvpdemo.model;
/**
 * 登錄的數據模型
 *
 */
public interface ILoginModel extends IBaseModel{
    /**
     * 
     * @param username 用戶名
     * @param pwd    密碼
     * @param loginCallBack    登錄回調接口
     */
    public void login(String username,String pwd,ILoginCallBack loginCallBack);
    /**
     *    登錄回調接口及回調方法
     */
    interface ILoginCallBack {
        public void onStatus();
    }
}
package com.example.mvpdemo.model.impl;

import com.example.mvpdemo.model.ILoginModel;

import android.os.AsyncTask;
/**
 * 登錄模型的具體實現
 *
 */
public class LoginModelImpl implements ILoginModel {
    public int status = ILoginModel.STATUS_NORMAL;    //記錄登錄狀態
    public String msg;    //登錄操做後的提示語
    
    @Override
    public void login(final String username, final String pwd,
            final ILoginCallBack loginCallBack) {
        if (status == ILoginModel.STATUS_VERIFY_ING) {
            return;
        }
            new AsyncTask<Void, Void, ILoginCallBack>() {

                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();
                }

                @Override
                protected ILoginCallBack doInBackground(Void... params) {
                    // TODO Auto-generated method stub
                    //具體的業務實現
                    if (username.equals("123") && pwd.equals("123")) {
                        status = ILoginModel.STATUS_SUCCESS;
                        msg = "登陸成功";
                    } else {
                        msg = "用戶名或密碼錯誤";
                        status = ILoginModel.STATUS_FAIL;
                    }
                    return loginCallBack;
                }

                @Override
                protected void onPostExecute(ILoginCallBack result) {
                    // TODO Auto-generated method stub
                    loginCallBack.onStatus();    //登錄成功後進行接口回調,告訴presenter對view操做進行界面操做
                    super.onPostExecute(result);
                }

            }.execute();
    }
}
package com.example.mvpdemo.presenter;

import com.example.mvpdemo.model.ILoginModel;
import com.example.mvpdemo.model.ILoginModel.ILoginCallBack;
import com.example.mvpdemo.model.impl.LoginModelImpl;
import com.example.mvpdemo.view.ILoginView;
/**
 *    登錄的Presenter
 */
public class LoginPresenter {
    LoginModelImpl loginModel;
    ILoginView iLoginView;

    public LoginPresenter(ILoginView iLoginView) {
        super();
        loginModel = new LoginModelImpl();
        this.iLoginView = iLoginView;
    }

    public ILoginView getiLoginView() {
        return iLoginView;
    }

    public void setiLoginView(ILoginView iLoginView) {
        this.iLoginView = iLoginView;
    }
    
    /**
     * 調用model進行數據處理,根據回調接口來操做ILoginView進行對應的activity界面更新
     * @param username
     * @param pwd
     */
    public void login(String username, String pwd) {
        System.out.println(username+","+pwd);
        loginModel.login(username, pwd, new ILoginCallBack() {

            public void onStatus() {
                System.out.println(loginModel.status+"");
                switch (loginModel.status) {
                case LoginModelImpl.STATUS_SUCCESS:
                    iLoginView.jumpActivity();
                    iLoginView.showMsg(loginModel.msg);
                    break;
                case LoginModelImpl.STATUS_FAIL:
                    iLoginView.showMsg(loginModel.msg);
                    break;
                default:
                    break;
                }
                loginModel.status=ILoginModel.STATUS_NORMAL;
            }
        });
    }
}
package com.example.mvpdemo;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.mvpdemo.presenter.LoginPresenter;
import com.example.mvpdemo.view.ILoginView;

public class LoginActivity extends Activity implements ILoginView {
    String Tag = "MainActivity";
    LoginPresenter loginPresenter;
    EditText username_et;
    EditText pwd_et;
    Button submit_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loginPresenter = new LoginPresenter(this);
        initView();
    }

    void initView() {
        username_et = (EditText) findViewById(R.id.username_et);
        pwd_et = (EditText) findViewById(R.id.pwd_et);
        submit_btn = (Button) findViewById(R.id.submit_btn);
        submit_btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                String username = username_et.getText().toString();
                String pwd = pwd_et.getText().toString();
                loginPresenter.login(username, pwd);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void showMsg(String msg) {
        // TODO Auto-generated method stub
        Log.i(Tag, msg);
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void showLoading() {
        // TODO Auto-generated method stub
        Log.i(Tag, "showLoading");
    }

    @Override
    public void hiddenLoading() {
        // TODO Auto-generated method stub
        Log.i(Tag, "hiddenLoading");
    }

    @Override
    public void jumpActivity() {
        // TODO Auto-generated method stub
        startActivity(new Intent(LoginActivity.this, MainActivity.class));
    }

    long lastTime;
    @Override
    public boolean back() {
        long currTime=System.currentTimeMillis();
        if(currTime-lastTime>3000){
            showMsg("再按一次退出");
            lastTime=currTime;
        }else{
            finish();
        }
        return false;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK){
            return back();
        }
        return super.onKeyDown(keyCode, event);
    }
}
相關文章
相關標籤/搜索