android mvp框架:dileber(https://github.com/dileber/dileber.git
接着上一篇的简介继续讲:
要使用这套框架首先需要在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的使用
后续的文章还会讲到框架中的一些特殊工具
热门评论
赞作者!
赞自己