android mvp框架:dileber(https://github.com/dileber/dileber.git
官方交流qq群:171443726
我个人qq:297165331~~有什么问题也可以咨询~~
公司网站:北京清华源码空间
接着上一篇的简介继续讲:
要使用这套框架首先需要在AndroidMainfest.xml添加权限
<!--联网权限--> <uses-permission android:name="android.permission.INTERNET" /> <!--往sdcard中写入数据的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--在sdcard中创建/删除文件的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>其次要建立一个Application继承于SApplication
public class SmailApplication extends SApplication{ @Override public void onCreate() { super.onCreate(); buglog(Configer.BUG_STATIC,Configer.BUG_NAME); } }如上buglog是一个日志打印工具,后面会仔细讲解
然后在application 中将name指向刚才继承的类
<application android:name=".app.SmailApplication" android:label="@string/app_name" android:icon="@drawable/ic_launcher">现在基本的设置就好了
然后就可以进行MVP开发了
如下图:
架构如下
建立五个包
app 基本包,包含设置,application
delegate 委托view层 ,包含所有界面的所有delegate,和相关的view接口
model 模型类 ,包含网络请求的 model
presenter 处理model和view
scm 处理网络数据,包括网络回调类
下面开始正式谈论框架的使用了
首先
先介绍一下我封装后的日志类
日志类的简介,后序会有详细介绍
框架中封装了android的log类。
如果你想改log打印名字的话,或者关闭log,需要在你继承的application的oncreate方法中写下如下
buglog(true,“tag”);
第一个参数是是否关闭 信息打印 ,如果填写false的话是关闭,true不关闭 默认不关闭
后面则是log的名字
如何使用log类
要打印的数据用逗号分开,该日志打印类还可以将你的行号和类打印出来。
如下
SLog.i("info",error.getMessage(),"dddddd","dsdsdsds");
打印效果如下
com.zhonghua.smailadd I/smailapp﹕ info {"error_code":10001,"reason":"错误的请求KEY"} dddddd dsdsdsds [ threadID=1,threadName=main,fileName=SplashActivity.java,className=com.zhonghua.smailadd.presenter.SplashActivity$1,methodName=success,lineNumber=39 ]
答应info信息
SLog.i("info",error.getMessage());
打印错误信息
SLog.e("ERROR_MESSAGE",error.getMessage());
打印警告信息
SLog.w("w",error.getMessage());
其次介绍一下如何网络请求
这是我封装了volley后的网络请求
首先要在继承scm
public class GoodsListScm extends Scm {
继承scm后的子类就有网络请求的能力了
如下图获取数据
请注意如下实现public void getGoodsList(String search, Integer order, Integer orderType, Double lat, Double lon, final OnGoodsListListener onGoodslistListener) { onGoodslistListener.before(); Map<String,Object> map = new HashMap<String,Object>(); netWork("http://api.avatardata.cn/Constellation/Query", map, GoodsModel.class, new HttpListener<GoodsModel>(){ @Override protected void onSuccess(GoodsModel response) { onGoodslistListener.success(response); } @Override protected void onFailure(VolleyError error) { SLog.e("ERROR_MESSAGE",error.getMessage()); onGoodslistListener.failed(); } } , TYPE_POST); }
netWork("http://api.avatardata.cn/Constellation/Query", map, GoodsModel.class, new HttpListener<GoodsModel>(){network中是目前可以传入model和string的
map目前只支持int string ,double 等基本类型后序我会继续添加的
请求的类型有两种
TYPE_POST TYPE_GET
你需要建立一个回调函数来将数据传回view
如果数据简单的话直接使用
INetListener
就可以完成数据的接收
继承的使用如下
public interface OnGoodsListListener<T> extends INetListener<T>{ }里面可以写你自己的接口
在view端的接收数据如下
GoodsListScm goodsListScm = new GoodsListScm(); goodsListScm.getGoodsList(null, null, null, null, null, new OnGoodsListListener<GoodsModel>() { @Override public void before() { viewDelegate.loading(); } @Override public void success(GoodsModel model) { String ss = HJson.toJson(model); SLog.i(">>>>>>",ss); viewDelegate.loadDialogDismiss(); } @Override public void failed() { viewDelegate.loadDialogDismiss(); } });
图片的网络请求,默认的缓存到一个目录下,后期我回开放缓存的接口会让大家自己缓存自己的地方
如何请求图片
如下
netWorkForImage(imageView,"https://c1.staticflickr.com/8/7516/16112631626_91e4c54e1e_n.jpg",R.drawable.splash);imageview是你的view 后面的参数是网址和 未请求到图片时显示的默认图片
网络请求讲完了,下一篇我则重点讲 presenter 和 delegate的使用
后续的文章还会讲到框架中的一些特殊工具