MVP

来源:互联网 发布:中世纪盔甲 知乎 编辑:程序博客网 时间:2024/06/01 09:50
mvp的实例:v层的接口:import com.honey.mvp.entity.News;import java.util.List;public interface HomeView {    //展示数据  v层负责展示数据    void showListData(List<News.ResultBean.DataBean> list);}现在是p层的接口:/** * presenter层接口  p层的副接口 */public interface IHomePretsenter<T> {    //T为泛型 相当于object    void attach(T view);//绑定    void detach();//解绑}和p层的实例用法:import android.util.Log;import com.honey.mvp.entity.News;import com.honey.mvp.model.HomeModel;import com.honey.mvp.model.IHomeModel;import com.honey.mvp.view.HomeView;import java.lang.ref.WeakReference;import java.util.List;/** * p层 让m层与v层交互   p层负责处理逻辑 */public class HomePresenter implements IHomePretsenter<HomeView>{    //HomeView view;    IHomeModel model;    //双层保证 不会出现内存泄漏    //1、软引用  在内存不足时会回收   如果Activity意外终止 使用该方式能保证    WeakReference<HomeView> mRefView;    //2、通过手动的方式直接释放  activity销毁时直接回收    public HomePresenter(HomeView view) {        this.model = new HomeModel();        attach(view);    }    //进行和View层的绑定  activity    @Override    public void attach(HomeView view) {        mRefView = new WeakReference(view);    }    //解绑    @Override    public void detach() {        mRefView.clear();        Log.i("======", "detach: " + "解绑");    }    //提供的一个  让model数据加载在view上的方法    public void getData(){        model.loadData(new IHomeModel.HomeDataCallback() {            @Override            public void complete(List<News.ResultBean.DataBean> list) {                System.out.println("======list"+list);                mRefView.get().showListData(list);            }        });    }}现在m层的接口:import com.honey.mvp.entity.News;import java.util.List;public interface IHomeModel {   void loadData(HomeDataCallback callback);//加载数据    //回调接口   interface HomeDataCallback{       void complete(List<News.ResultBean.DataBean> list);   }}接下来就是m层的实例:import com.google.gson.Gson;import com.honey.mvp.app.App;import com.honey.mvp.entity.News;import java.io.IOException;import java.util.List;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;import xp.code.okhttp3.utils.OkHttp3Utils;/** * m层 负责请求数据 */public class HomeModel implements IHomeModel{    @Override    public void loadData(final HomeDataCallback callback) {//        List list=new ArrayList();//        for(int i=0;i<100;i++){//            list.add("你好"+i);//        }//        //回调model成中的接口//        callback.complete(list);        OkHttp3Utils.doGet(App.URL, null, 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();                System.out.println("======string"+string);                Gson gson=new Gson();                News news = gson.fromJson(string, News.class);                List<News.ResultBean.DataBean> data = news.getResult().getData();                callback.complete(data);            }        });    }}接下来就是MainActivity中的代码了:import android.os.Bundle;import android.widget.ListView;import com.honey.mvp.adapter.MyAdapter;import com.honey.mvp.entity.News;import com.honey.mvp.presenter.HomePresenter;import com.honey.mvp.view.HomeView;import java.util.List;public class MainActivity extends BaseActivity<HomePresenter> implements HomeView{    private ListView listView;    private HomePresenter presenter;//p层    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化空件        initView();        presenter.getData();    }    //是由BaseActvity提供  在BaseActivity的onCreate方法中调用    @Override    public void createPresenter() {        presenter = new HomePresenter(this);    }    /**     * 获取控件     */    public void initView() {        listView=findViewById(R.id.listView);    }    //由View接口提供的方法  使用Model给的数据进行展示    @Override    public void showListData(List<News.ResultBean.DataBean> list) {        System.out.println("======list"+list.size());        MyAdapter adapter=new MyAdapter(MainActivity.this,list);        listView.setAdapter(adapter);    }}因为我们用实现的是BaseActivity,所以我们再来写一个BaseActivity的用法:import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import com.honey.mvp.presenter.IHomePretsenter;public abstract class BaseActivity<T extends IHomePretsenter> extends AppCompatActivity{    //使用范型定义个Presenter对象  该范型必须满足IPresenter类型 所以使用<T extends IPresenter>    T presenter;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        createPresenter();        initView();    }    public abstract void createPresenter();    public abstract void initView();    //让所有的Activity销毁时  统一在Base中进行和Presenter解绑    @Override    protected void onDestroy() {        super.onDestroy();        if(presenter != null){            presenter.detach();        }    }}因为我们请求的是网上的数据,所以根据习惯我们会用OKhttp来获取,要用到bean类,app,适配器,这里就不一一列举了,以上就是基本的mvp的用法了。
原创粉丝点击