Android 简单MVP框架

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值