MVP+OKHttp 用户登录demo
2016-05-05 17:28
330 查看
关于什么是MVP模式,本文就不再阐述了,下面直接进入正题。
首先我们来看下项目的结构
![](http://img.blog.csdn.net/20160505165751463?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Model层
对于用户登录, 首先建立IUserLoginModel接口
Presenter层
作为model和view的中间件,它要负责的是将在model 中获取的数据展示到view 中。
View层
这里说的View层,其实是定义了一组接口方法,通过在Activity或者Fragment中实现此接口进行具体的展示工作。
这样我们的UserLoginActivity 中就变得很干净了。只有单纯的View层方面的逻辑。
在demo中,使用了OkHttp 作为网络请求的库,在使用中发现, OkHttp功能非常的强大,可以自由灵活的封装成http 请求入口。值得注意的是,OkHttp 的异步请求回调接口Callback 依旧是在子线程中,不能进行一系列的关于UI线程的操作。demo中简单的基于OKHttp 封装了http异步请求的类,可进行参考。
假如不习惯使用OKHttp进行网络请求,本人推荐另一个第三方的网络请求库虽然没有OkHttp强大,但是用起来真特么的爽!!!官方地址http://loopj.com/android-async-http/。对于mvp架构,随便你怎么换网络请求库,都不会影响整体的架构。
项目源码地址 https://github.com/fyxjsj/MVPDemo
首先我们来看下项目的结构
Model层
对于用户登录, 首先建立IUserLoginModel接口
public interface IUserLoginModel { void userLogin(Context context, String account, String pwd, HttpRequestCallback callBack); void getUserList(Context context, HttpRequestCallback callback); }UserLoginModel 实现此接口,发送请求登录
public class UserLoginModel extends BaseModel implements IUserLoginModel { @Override public void userLogin(Context context, String account, String pwd, HttpRequestCallback callBack) { RequestParams params = new RequestParams(); params.put("account", account); params.put("pwd", pwd); sendPostRequest(context, USER_LOGIN, params, callBack); } @Override public void getUserList(Context context, HttpRequestCallback callback) { sendGetRequest(context, GET_USER_LIST, callback); } }通过在BaseModel统一设置Http请求方法,通过HttpRequestCallback 进行回调。
Presenter层
作为model和view的中间件,它要负责的是将在model 中获取的数据展示到view 中。
public class UserLoginPresenter extends BasePresenter { private IUserLoginView userLoginView; private IUserLoginModel userLoginModel; public UserLoginPresenter(IUserLoginView userLoginView) { this.userLoginView = userLoginView; this.userLoginModel = new UserLoginModel(); } /** * 用户开始登录 * * @param context * @param account * @param pwd */ public void login(final Context context, String account, String pwd) { if (StringUtil.isEmpty(account)) { userLoginView.showTip("请输入账号"); return; } if (StringUtil.isEmpty(pwd)) { userLoginView.showTip("请输入密码"); return; } userLoginModel.userLogin(context, account, pwd, new HttpRequestCallback<Result<User>>() { @Override public void onStart() { userLoginView.showLoadingDialog(); } @Override public void onFinish() { userLoginView.closeLoadingDialog(); } @Override public void onResponse(Result<User> user) { userLoginView.onLogin(user); } @Override public void onFailure(Call call, HttpException e) { userLoginView.showTip(e.getMessage()); } }); } }通过调用userLoginView 中的接口方法,将返回数据展示出来,完全脱离之间关联关系,在View中完全不用理会数据是如何获取的,只关心结果。
View层
这里说的View层,其实是定义了一组接口方法,通过在Activity或者Fragment中实现此接口进行具体的展示工作。
public interface IUserLoginView extends IBaseView { /** * 获取输入账号 * * @return */ String getAccount(); /** * 获取输入的密码 * * @return */ String getPwd(); /** * 登录回调 * * @param result */ void onLogin(Result<User> result); /** * 获取用户列表(只是个案例) * * @param result */ void onGetUserList(Result<List<User>> result); }
这样我们的UserLoginActivity 中就变得很干净了。只有单纯的View层方面的逻辑。
在demo中,使用了OkHttp 作为网络请求的库,在使用中发现, OkHttp功能非常的强大,可以自由灵活的封装成http 请求入口。值得注意的是,OkHttp 的异步请求回调接口Callback 依旧是在子线程中,不能进行一系列的关于UI线程的操作。demo中简单的基于OKHttp 封装了http异步请求的类,可进行参考。
假如不习惯使用OKHttp进行网络请求,本人推荐另一个第三方的网络请求库虽然没有OkHttp强大,但是用起来真特么的爽!!!官方地址http://loopj.com/android-async-http/。对于mvp架构,随便你怎么换网络请求库,都不会影响整体的架构。
项目源码地址 https://github.com/fyxjsj/MVPDemo
相关文章推荐
- Swift 网络请求数据与解析
- Java的异步HttpClient
- HttpClient4.5.2通过POST发送XML
- WSAAsyncSelect基于异步通知的网络socket通信案例一
- UDP连接和TCP连接的异同
- Spring中MultipartHttpServletRequest实现文件上传
- MFC显示网络图片_3
- Jmeter之Badboy录制脚本及简化脚本http请求(三)
- wireshark通过TCP抓包进行确认
- 神经网络
- 一文读懂卷积神经网络
- HttpUploader2 -chrome 45+安装教程
- linux网络常用命令
- C# HttpWebRequest 请求 常出现的问题
- 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
- httperf下载
- 自动化测试Web服务器性能autobench+httperf
- 利用nginx搭建http和rtmp协议的流媒体服务器
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)(解决不可连的问题,解决方案在最后面)
- virtualbox桥接网络配置--CentOS