[Android] Android MVP 架构下 最简单的 代码实现
?Android? MVP 架構下? 最簡單的 代碼實現
?
首先看圖:
上圖是MVP,下圖是MVC
MVP和MVC的區別,在于以前的View層不僅要和model層交互,還要和controller層交互。而在mvp中,view層只和presenter層交互,而model層也和presenter交互,presenter構成了view層和model層的橋梁,也解耦了view層和model層。這一點很關鍵。我認為,這也是mvp的本質:解耦view層和model層,讓view層和model層通過presenter層進行通信。換個說法就是讓諸如網絡請求,數據庫讀寫的邏輯,從activity中剝離出來。activit只負責頁面的展示,不關心model層的邏輯。
?
簡單的MVP模式,3個class 和 1個interface 就可以實現
各文件主要功能如下:
1個interface:定義activity 要實現的回調方法
3個class:1個Model層定義文件 +? 1個業務邏輯 Presenter文件? + 1個Activity文件
?
列舉實現代碼
1)interface定義文件
MainCallBack.java
package com.jack.basemvp.basemvp;/*** 定義要實現的回調方法*/ public interface MainCallBack {void getMessage(String message);void error(); }
2)Model層文件
MainModel.java
package com.jack.basemvp.basemvp;import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request;/*** 定Model*/ public class MainModel {public Call getData(String url) {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).build();return client.newCall(request);} }
3)Presenter層文件
MainPresenter.java
package com.jack.basemvp.basemvp;import android.support.annotation.NonNull;import java.io.IOException;import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response;/*** 定義業務邏輯 Presenter*/ public class MainPresenter {private MainCallBack callBack;private MainModel model;public MainPresenter(MainCallBack callBack) {this.callBack = callBack;model=new MainModel();}public void getUrlData(String url){model.getData(url).enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {callBack.error();}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {callBack.getMessage(response.body().string());}});}}
4)activity調用
SimpleMvpActivity.java
package com.jack.basemvp.activity;import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;import com.jack.basemvp.R; import com.jack.basemvp.basemvp.MainCallBack; import com.jack.basemvp.basemvp.MainPresenter;import java.lang.ref.WeakReference;public class SimpleMvpActivity extends AppCompatActivity implements View.OnClickListener,MainCallBack{public EditText simple_et;Button btn_submit_req;TextView simple_tv;private MainPresenter presenter;private MyHandler handler;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simple_mvp);simple_et = (EditText) findViewById(R.id.simple_et);btn_submit_req = (Button) findViewById(R.id.btn_submit_req);simple_tv = (TextView) findViewById(R.id.simple_tv);handler = new MyHandler(this);presenter = new MainPresenter(this);btn_submit_req.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn_submit_req:String url = simple_et.getText().toString();presenter.getUrlData(url);break;}}@Overridepublic void getMessage(String message) {Message msg = handler.obtainMessage(0, message);handler.sendMessage(msg);}@Overridepublic void error() {Message msg = handler.obtainMessage(1, "error");handler.sendMessage(msg);}private static class MyHandler extends Handler {private WeakReference<SimpleMvpActivity> reference;private MyHandler(SimpleMvpActivity activity) {reference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);SimpleMvpActivity activity = reference.get();switch (msg.what) {case 0:activity.simple_tv.setText(msg.obj.toString());break;case 1:activity.simple_tv.setText(msg.obj.toString());break;}}} }
?
?
具體代碼見Github:
https://github.com/wukong1688
?
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/10794023.html
轉載請著名出處!謝謝~~
?
?
?
?
轉載于:https://www.cnblogs.com/wukong1688/p/10794023.html
總結
以上是生活随笔為你收集整理的[Android] Android MVP 架构下 最简单的 代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦断代码阅读笔记03
- 下一篇: 电影《狂蟒之灾》的内容是?类似《狂蟒之灾