标签:MVP 架构 simple void basemvp activity import Android public
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() { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { callBack.error(); } @Override public 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; @Override protected 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); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_submit_req: String url = simple_et.getText().toString(); presenter.getUrlData(url); break; } } @Override public void getMessage(String message) { Message msg = handler.obtainMessage(0, message); handler.sendMessage(msg); } @Override public 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); } @Override public 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:
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/10794023.html
转载请著名出处!谢谢~~
标签:MVP,架构,simple,void,basemvp,activity,import,Android,public 来源: https://www.cnblogs.com/wukong1688/p/10794023.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。