手记

android mvp快速开发框架介绍(dileber介绍二)

该旧款android框架已经不再使用,详细更新框架,请移到 android开发(如何开发一个可以维护的好项目):一 、定义基类 项目新框架地址也变更为https://github.com/dileber/ndileber

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的使用

后续的文章还会讲到框架中的一些特殊工具

10人推荐
随时随地看视频
慕课网APP

热门评论

赞作者!

赞自己

查看全部评论