Android MVP 架构下 最简单的 代码实现
首先看图:
上图是MVP,下图是MVC
解耦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
转载请著名出处!谢谢~~