MVP的简单介绍

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

MVP的简单介绍

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

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

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;
        }
    }
}