MVP模式获取数据



MVP与MVC的区别



MVP与MVC的最大区别就是Moudel层与View层不能直接通信,需要通过Presenter进行交互


其中

model层主要是获取网络请求下来的数据
Presenter层主要是用来进行逻辑操作,也是逻辑层
View层是视图层



各个层都要自定义接口进行使用
首先是Model的接口

public interface DataMoudle {


    void getData(String url, DataPresenter presenter);
}




然后是model层的获取数据的操作

public class MyDataMoudle implements DataMoudle {


    //请求数据的
    @Override
    public void getData(String url, final DataPresenter presenter) {




        //请求数据
        OkhtttpUtils.doGet(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {


            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
               //可以认为是请求成功
                String json = response.body().string();




                Gson gson = new Gson();
                ShopingBean shopingBean = gson.fromJson(json, ShopingBean.class);


                //得到数据,服务器的
                List<ShopingBean.DataBean> list = shopingBean.getData();




                //回调给p层
                presenter.success(list);


            }
        });

    }
}

使用OkHttpUtils工具类进行获取数据(见其他文章)




然后是Presenter层的接口

public interface DataPresenter {


   void success(List<ShopingBean.DataBean> list);
   void error();
}


写一个继承Presenter层接口的类重写其中的方法
并进行model与view二者之间的交互(将数据传到view层进行展示)

public class MyDataPresenter implements DataPresenter{




    private final MyDataMoudle myDataMoudle;
    DataView dataView;


    public  MyDataPresenter(DataView dataView){
        this.dataView = dataView;
        myDataMoudle = new MyDataMoudle();
    }


    //M层得到数据,传给p层 ,传给view 层
    @Override
    public void success(List<ShopingBean.DataBean> list) {


        dataView.toBackHome(list);
    }

    @Override
    public void error() {
    }
    //请求数据的方法
    public void netWork(String dataUrl) {
        myDataMoudle.getData(dataUrl,this);
    }
}



接着是view层的接口

public interface DataView {


    void toBackHome(List<ShopingBean.DataBean> list);
}

再写一个继承view层接口的类(不一定非要是Mainactivity)

public class MainActivity extends AppCompatActivity implements DataView{

    String dataUrl ="https://www.zhaoapi.cn/product/getProducts?pscid=1";

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);


           List<ShopingBean.DataBean> list = (List<ShopingBean.DataBean>) msg.obj;

            MyAdapter adapter = new MyAdapter(MainActivity.this,list);
            lv.setAdapter(adapter);
        }
    };
    private ListView lv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);




        CheckBox cb = findViewById(R.id.cb);
        lv = findViewById(R.id.lv);


        //lv.setAdapter();




        MyDataPresenter presenter = new MyDataPresenter(this);
        presenter.netWork(dataUrl);
    }

//子线程里面
    @Override
    public void toBackHome(List<ShopingBean.DataBean> list) {


        Message msg = new Message();
        msg.obj= list;


        handler.sendMessage(msg);
    }
}

设置适配器是必须在子线程中,所以用Handler设置适配器



在解析数据的类里的集合里面加上(注:博主工程所需,请忽略)

这是判断多选框是否有选中
boolean isCheck;
        public void setCheck(boolean isCheck){
            this.isCheck = isCheck;
        }


        public boolean getCheck(){
           return isCheck;
        }


其中用到的依赖和权限:

清单文件中的请求网络的权限,


Gson的依赖:compile 'com.google.code.gson:gson:2.2.4'
OkHttp请求的依赖:   compile 'com.squareup.okhttp3:okhttp:3.10.0'
Glide设置图片的依赖:    compile 'com.github.bumptech.glide:glide:3.7.0'




PS:MVP主要思路和格式是这样的,数据以自己获取的为准。









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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值