MVP的简单介绍

来源:互联网 发布:怎么卸载手机管家软件 编辑:程序博客网 时间:2024/05/16 13:45

简称:MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

举例说明进行网络请求数据

//进行网络请求时需要加入依赖

compile 'com.squareup.okhttp3:okhttp:3.9.0'

//V层

public interface DataView {      void getData(List<String> list);}
//M层

public class DataModel {    private List<String> list;     public void getInfo(final ModeDataListener listener){         OkHttpClient client = new OkHttpClient();         list = new ArrayList<>();         final Request request = new Request.Builder().url    ("http://japi.juhe.cn/health_knowledge/categoryList?key=4b7da8935e022b95d895dcd3c4184f0c").build();         Call call = client.newCall(request);         call.enqueue(new Callback() {             @Override             public void onFailure(Call call, IOException e) {             }             @Override             public void onResponse(Call call, Response response) throws IOException {                 String string = response.body().string();                 Gson gson = new Gson();                 Healther healther = gson.fromJson(string, Healther.class);                 List<Healther.ResultBean> result = healther.getResult();                 for (Healther.ResultBean r:result) {                     list.add(r.getName());                 }                 listener.getData(list);             }         });     }     public interface  ModeDataListener{         void  getData(List<String> list);     }  }

//P层

public class DataPresenter {    private UserModel userModel;    private DataView dataView;    public DataPresenter(DataView dataView) {        this.dataView = dataView;        this.userModel = new UserModel();    }    public void  get(){        userModel.getInfo(new UserModel.ModeDataListener() {            @Override            public void getData(List<String> list) {                dataView.getData(list);            }        });    }    public void detach(){        dataView = null;    }}

//主类

public class MainActivity extends AppCompatActivity implements DataView {    private DataPresenter presenter;    private ListView lv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);               lv = (ListView) findViewById(R.id.lv);        presenter = new DataPresenter(this);        presenter.get();    @Override    public void getData(final List<String> list) {        runOnUiThread(new Runnable() {            @Override            public void run() {                System.out.println("===="+list.size());                ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,                android.R.layout.simple_list_item_1,list);                lv.setAdapter(adapter);            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        presenter.detach();    }}
//JavaBean类

public class Healther {    private int error_code;    private String reason;    private List<ResultBean> result;    public int getError_code() {        return error_code;    }    public void setError_code(int error_code) {        this.error_code = error_code;    }    public String getReason() {        return reason;    }    public void setReason(String reason) {        this.reason = reason;    }    public List<ResultBean> getResult() {        return result;    }    public void setResult(List<ResultBean> result) {        this.result = result;    }    public static class ResultBean {              private int id;        private String name;        private String description;        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public String getDescription() {            return description;        }        public void setDescription(String description) {            this.description = description;        }    }}