android 開發(fā)之初學(xué)MVP設(shè)計(jì)模式(模擬登錄)

android 開發(fā)之初學(xué)MVP設(shè)計(jì)模式(模擬登錄)

以模擬登錄為例迎献,學(xué)習(xí)MVP模式

一、新建工程腻贰,創(chuàng)建MVP目錄結(jié)構(gòu)

Paste_Image.png
1忿晕、activity  主要放activity界面
2、Model  M層 主要放基本實(shí)體類银受、接口和接口實(shí)現(xiàn)類
3践盼、View   V層  view與presenter交互的接口,讓Activity實(shí)現(xiàn)
4宾巍、Presenter  P層  Model與view的控制器咕幻,持有view和model的引用,從view中獲取參數(shù)顶霞,交給model去處理肄程,執(zhí)行結(jié)果通過接口的方式通過presenter層傳遞給view層進(jìn)行顯示。

二选浑、在veiw層中創(chuàng)建LoginView 接口蓝厌,獲取activity中需要的參數(shù)

Paste_Image.png

在Activity中實(shí)現(xiàn)該接口,將參數(shù)暴露給loginview

Paste_Image.png

三古徒、在model層創(chuàng)建OnLoginListener接口 拓提,用來監(jiān)聽處理model實(shí)現(xiàn)后的操作;

Paste_Image.png

在presenter層創(chuàng)建LoginPresenter類實(shí)現(xiàn)OnLoginListener接口隧膘,用來處理model的View

/**
 * Created by zzj on 2017/1/6.
 */
public class LoginPresenter implements OnLoginListener {
    
    @Override
    public void onUsernameError() {
        
    }

    @Override
    public void onPasswordError() {

    }

    @Override
    public void onSuccess() {

    }

    @Override
    public void onFailure() {

    }
}

四代态、在model層創(chuàng)建登錄接口(LoginPort),獲取需要的參數(shù)

/**
 * 登錄接口
 * Created by zzj on 2017/1/6.
 */
public interface LoginPort {

    void login(String username,String password,OnLoginListener onLoginListener);
}

在model層中創(chuàng)建loginModelImple類實(shí)現(xiàn)LoginPort接口疹吃,此類主要是處理網(wǎng)絡(luò)請求的操作蹦疑。由于本次未使用到網(wǎng)絡(luò)請求,簡單實(shí)現(xiàn)本地模擬登錄萨驶。

/** 處理網(wǎng)絡(luò)請求的操作
 * Created by zzj on 2017/1/6.
 */
public class LoginModelImple implements LoginPort {
    @Override
    public void login(String username, String password, OnLoginListener onLoginListener) {

        if(username.equals("admin")&&password.equals("123456")){
            onLoginListener.onSuccess();//登錄成功
        }else if(!username.equals("admian")||!password.equals("123456")){
            onLoginListener.onUsernameError();//用戶名或者密碼錯誤
        }else {
            onLoginListener.onFailure();//登錄失敗
        }

    }
}

五歉摧、在LoginPresenter類中,聲明實(shí)例化登錄接口(LoginPort)和登錄View(LoginView),將從view層獲取的用戶名和密碼傳送給model層叁温,然后讓activity中的登錄按鈕調(diào)用

/**
 * Created by zzj on 2017/1/6.
 */
public class LoginPresenter implements OnLoginListener {
    private LoginPort loginPort;//登錄接口
    private LoginView loginView;//登錄veiw
    //實(shí)例化登錄接口和登錄view
    public LoginPresenter(LoginView loginView){
        this.loginView = loginView;
        loginPort = new LoginModelImple();
    }
    /**
     * 將從view層中獲取的用戶名和密碼傳送給Model層
     * 然后讓activity中的登錄按鈕調(diào)用此方法
     */
    public void login(){
        String username = loginView.getUsername();
        String password = loginView.getPassword();
        loginPort.login(username,password,this);
    }
    @Override
    public void onUsernameError() {
        loginView.showToast("用戶名或者密碼錯誤");
    }
    @Override
    public void onSuccess() {
        loginView.showToast("登錄成功豆挽!");
    }
    @Override
    public void onFailure() {
        loginView.showToast("異常錯誤!");
    }
}

在loginAcitivy中實(shí)例化LoginPresenter類券盅,調(diào)用login方法帮哈。

public class LoginActivity extends AppCompatActivity implements View.OnClickListener,LoginView {
    private AppCompatEditText username ,password;
    private AppCompatButton loginBt;
    private LoginPresenter loginPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        loginPresenter = new LoginPresenter(this);
    }
    private void initView(){
        username = (AppCompatEditText) findViewById(R.id.login_username);
        password = (AppCompatEditText) findViewById(R.id.login_password);
        loginBt = (AppCompatButton) findViewById(R.id.login_loginbt);
        loginBt.setOnClickListener(this);
    }
    /**
     * 向view層暴露參數(shù)
     * @return 用戶名
     */
    public String getUsername(){
        return username.getText().toString().trim();
    }
    public String getPassword(){
        return password.getText().toString().trim();
    }
    @Override
    public void showToast(String msg) {
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onClick(View v) {
        loginPresenter.login();
    }
}

效果展示:


Screenshot_1483695444.png
Screenshot_1483695452.png

demo地址:https://github.com/z1060932884/MVPLoginDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锰镀,隨后出現(xiàn)的幾起案子娘侍,更是在濱河造成了極大的恐慌,老刑警劉巖泳炉,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憾筏,死亡現(xiàn)場離奇詭異,居然都是意外死亡花鹅,警方通過查閱死者的電腦和手機(jī)氧腰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刨肃,“玉大人古拴,你說我怎么就攤上這事≌嬗眩” “怎么了黄痪?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盔然。 經(jīng)常有香客問我桅打,道長,這世上最難降的妖魔是什么愈案? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任挺尾,我火速辦了婚禮,結(jié)果婚禮上站绪,老公的妹妹穿的比我還像新娘遭铺。我一直安慰自己,他們只是感情好崇众,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布掂僵。 她就那樣靜靜地躺著航厚,像睡著了一般顷歌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幔睬,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天眯漩,我揣著相機(jī)與錄音,去河邊找鬼。 笑死赦抖,一個胖子當(dāng)著我的面吹牛舱卡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播队萤,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼轮锥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了要尔?” 一聲冷哼從身側(cè)響起舍杜,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赵辕,沒想到半個月后既绩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡还惠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年饲握,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚕键。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡救欧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锣光,到底是詐尸還是另有隱情颜矿,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布嫉晶,位于F島的核電站骑疆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏替废。R本人自食惡果不足惜箍铭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望椎镣。 院中可真熱鬧诈火,春花似錦、人聲如沸状答。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惊科。三九已至拍摇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馆截,已是汗流浹背充活。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工蜂莉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像挡育,于是被迫代替她去往敵國和親渤愁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容