MVP的讲解
制定契约Contract
制定Model层、P层、View层对应的接口
public interface DownLoadeContract {
interface requestDownloade{
//P层告诉Model层要做什么
void requestDownloade(ImageBen imageBen);
}
interface VP{
//V层告诉P层要做什么
void requestDownloade(ImageBen imageBen);
//P层得到M层的返回结果
void requestDownloadeResult(boolean result,ImageBen imageBen);
}
}
创建返回Ben类
public class ImageBen {
private String ImagePath;
private Bitmap bitmap;
public ImageBen(){
}
public String getImagePath() {
return ImagePath;
}
public void setImagePath(String imagePath) {
ImagePath = imagePath;
}
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
}
Present层的实现
Present层实现DownLoadeContract的VP接口,接收到View层的指令,通知Model层完成相关操作。Model完成具体操作后,将结果返回给View层。
public class DwonloadePresent implements DownLoadeContract.VP {
private MainActivity view;
private DownloadModle modle;
public DwonloadePresent(MainActivity view){
this.view = view;
modle = new DownloadEngine(this);
}
@Override
public void requestDownloade(ImageBen imageBen) {
Log.e("zheng","zheng"+imageBen.toString());
//接收到V层的指令,去完成一项操作
modle.requestDownloade(imageBen);
}
@Override
public void requestDownloadeResult(final boolean result,final ImageBen imageBen) {
//将结果返回给View(刷新UI)
view.runOnUiThread(new Runnable() {
@Override
public void run() {
view.requestDownloadeResult(result,imageBen);
}
});
}
}
Model层的实现
Model层实现DownLoadeContract接口,接收Present层的通知,完成操作后返回结果给Present层。
public class DownloadModel implements DownLoadeContract.requestDownloade {
DwonloadePresent present;
public DownloadModel (DwonloadePresent dwonloadePresent) {
this.present = dwonloadePresent;
}
@Override
public void requestDownloade(ImageBen imageBen) {
new Thread(new DownLoader(imageBen)).start();
}
public final class DownLoader implements Runnable{
private ImageBen imageBen;
public DownLoader(ImageBen imageBen){
this.imageBen = imageBen;
}
@Override
public void run() {
try {
URL url = new URL(Constant.Image_Path);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("GET");
if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStream inputStream = httpURLConnection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
Show(true,bitmap);
}
} catch (Exception e) {
e.printStackTrace();
Show(false,null);
}
}
private void Show(boolean request ,Bitmap bitmap){
imageBen.setBitmap(bitmap);
present.requestDownloadeResult(request,imageBen);
}
}
}
View层实现
MainActivity中实现DownLoadeContract.VP接口,传递/接收Present层数据
public class MainActivity extends AppCompatActivity implements DownLoadeContract.VP{
private ImageView imageView;
private DwonloadePresent present;
ImageBen imageBen1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.button1);
imageView = (ImageView)findViewById(R.id.imageview1);
imageBen1 = new ImageBen();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestDownloade(imageBen1);
}
});
}
@Override
public void requestDownloade(ImageBen imageBen) {
imageBen1 = new ImageBen();
imageBen1.setImagePath(Constant.Image_Path);
Log.e("zheng","zheng"+imageBen1.toString());
present.requestDownloade(imageBen1);
Log.e("zheng","zheng"+imageBen1.toString());
}
@Override
public void requestDownloadeResult(boolean result, ImageBen imageBen) {
Toast.makeText(MainActivity.this,result?"成功":"失败",Toast.LENGTH_SHORT).show();
if (result){
imageView.setImageBitmap(imageBen.getBitmap());
}
}
}
utils相关的类
public class Constant {
public static final String Image_Path = "https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png";
public static final int SUCESS = 200;
public static final int ERRO = 404;
}
简单MVP框架构造
简单MVP的构架:
1、View层中实现VP接口,通过接口像Present层发送指令,同时通过接口接收返还结果。
2、Present层中实现VP