MVP + okHttpUtils的简单实践

来源:互联网 发布:windows有多少行代码 编辑:程序博客网 时间:2024/06/05 16:05

本文主要简述MVP和网络请求框架的实践。

如果还不了解Okhttp,你可以去    http://www.jianshu.com/p/4c17956fe3b4 了解下,现在已经成为广大开发者的首选网络通讯库,相信你会喜欢的。

OkHttpUtils 目前支持

一般的 get,post,put,delete,head,options请求

基于Post的大文本数据上传

多文件和多参数统一的表单上传

支持一个key上传一个文件,也可以一个Key上传多个文件

大文件下载和下载进度回调

大文件上传和上传进度回调

支持cookie的内存存储和持久化存储,支持传递自定义cookie

支持304缓存协议,扩展四种本地缓存模式,并且支持缓存时间控制

支持301、302重定向

支持链式调用

支持可信证书和自签名证书的https的访问,支持双向认证

支持根据Tag取消请求

支持自定义泛型Callback,自动根据泛型返回对象


MVP模式的介绍

在android中
模型(Model):业务逻辑处理,负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等;
视图(View):负责界面数据的展示,与用户进行交互,就是Activity;
主导器(Presenter):相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来。通过Presenter进行它们之间的交互,隔离了M、V之间的直接交互。


首先是方法模型层

public class OkHttpModel {    private static OkHttpModel instance = new OkHttpModel();    public static OkHttpModel getInstance() {        return instance;    }
    //post请求获取数据    public void postMap(Map<String, String> map, final ResultCallBack callback) {        OkHttpUtils.post().url(UrlConfig.TEST_URL).params(map).build().execute(new StringCallback() {            @Override            public void onError(Call call, Exception e, int i) {                callback.result(e.toString());            }            @Override            public void onResponse(String s, int i) {                callback.result(s);            }        });    }
}
Resutl数据接口
public interface ResultCallBack {    void result(String s);}

视图进行数据传输的接口

public interface MainView {    void postStringView(String s);}

主导器Presenter

public class MainPresenter {    private OkHttpModel model = OkHttpModel.getInstance();    private MainView mainView;    private Context mContext;    public MainPresenter(Context context, MainView mainView) {        this.mContext = context;        this.mainView = mainView;    }    public void postMap(String url, Map<String, String> map) {        model.postMap(map, new ResultCallBack() {            @Override            public void result(String s) {                System.out.println(s);                mainView.postStringView(s);            }        });    }}

Activity的Demo
这里使用了ButterKnife,有兴趣的可以去有百度下
public class TestActivity extends Activity implements MainView{    @BindView(R.id.btnTest)    Button btnTest;    @BindView(R.id.image_test)    ImageView imageTest;    private MainPresenter mPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);    }    @OnClick({R.id.btnTest, R.id.image_test})    public void onClick(View view) {        switch (view.getId()) {            case R.id.btnTest:                getString();                break;            case R.id.image_test:                break;        }    }    private void getString() {        Map<String, String> map = new HashMap<>();        map.put("key1", "value1");        mPresenter = new MainPresenter(this,this);        mPresenter.postMap(UrlConfig.TEST_URL,map);    }    @Override    public void postStringView(String s) {        T.showShort(s);
//Toast成功弹出    }
}

至此简述完成