mvp架构 java_[Android] Android MVP 架构下 最简单的 代码实现

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 interfaceMainCallBack {voidgetMessage(String message);voiderror();

}

2)Model层文件

MainModel.java

package com.jack.basemvp.basemvp;

import okhttp3.Call;

import okhttp3.OkHttpClient;

import okhttp3.Request;/**

* 定Model*/

public classMainModel {publicCall getData(String url) {

OkHttpClient client= newOkHttpClient();

Request request= newRequest.Builder().url(url).build();returnclient.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 classMainPresenter {privateMainCallBack callBack;privateMainModel model;publicMainPresenter(MainCallBack callBack) {this.callBack =callBack;

model=newMainModel();

}public voidgetUrlData(String url){

model.getData(url).enqueue(newCallback() {

@Overridepublic voidonFailure(@NonNull Call call, @NonNull IOException e) {

callBack.error();

}

@Overridepublic voidonResponse(@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 classSimpleMvpActivity extends AppCompatActivity implements View.OnClickListener,MainCallBack{publicEditText simple_et;

Button btn_submit_req;

TextView simple_tv;privateMainPresenter presenter;privateMyHandler handler;

@Overrideprotected voidonCreate(@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 voidonClick(View v) {switch(v.getId()){caseR.id.btn_submit_req:

String url=simple_et.getText().toString();

presenter.getUrlData(url);break;

}

}

@Overridepublic voidgetMessage(String message) {

Message msg= handler.obtainMessage(0, message);

handler.sendMessage(msg);

}

@Overridepublic voiderror() {

Message msg= handler.obtainMessage(1, "error");

handler.sendMessage(msg);

}private static classMyHandler extends Handler {private WeakReferencereference;privateMyHandler(SimpleMvpActivity activity) {

reference= new WeakReference<>(activity);

}

@Overridepublic voidhandleMessage(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:

转载请著名出处!谢谢~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值