您的位置:首页 > 理论基础 > 计算机网络

MVP + okHttpUtils的简单实践

2017-08-24 11:14 127 查看
本文主要简述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() {@Overridepublic 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;@Overrideprotected 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);}@Overridepublic void postStringView(String s) {T.showShort(s);
	//Toast成功弹出}
}
至此简述完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息