MVP

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的用法了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值