HS2.0梳理(1)

服务器接口

服务器的接口配置是在ApiStores接口文件中,先看下样例

@GET("operation/show.json")
Flowable<HttpBase<HomeNovel>> getHomeMixNovelDatas(@Query("position") String position,
                                                   @Query("page") int page,
                                                   @Query("page_size") int size);
@GET("operation/getQuestionList.json")
Flowable<HttpBase<FeedBack>> getQuestionList(@QueryMap() Map<String, String> params);
  • @配置get和post方法,分别为@GET@POST
  • beanFlowableRxJava的一种写法,后边接一个泛型< HttpBase <bean的类型>>
  • 函数名:加函数名字,这个可以自定义
  • 参数:
    • 单个参数使用@Query("后端参数名")参数类型 前端参数名,多个参数的话用多个@Query包裹,并用逗号分隔
    • 多个参数只要传入@QueryMap() Map<String, String> params固定写法
    • @ FieldMap 暂不知道用法

创建基础类

  • 新建contract类

    • 其作用试讲P层和View层分开
    • 创建普通实体类
    • 类内部顶一个继承自HSView的接口,接口名为View
  • 新建前端bean

    • 根据界面模拟一下所需数据的字段和类型,封装为一个bean,前提是不知道后端返回的数据类型
    • 如果是java类需要添加getter 和 setter方法,以及构造方法,kotlin不需要
  • 新建Presenter类

    • 继承自HSPresenter,泛型为刚才的contact点View
    • 根据提示实现构造方法,其中构造方法的参数类型为contactView
    • 定义数据获取方法,名字随意,然后调用方法addSubscription,参数为
    • 调用后台接口的Flowable接口方法,通过apiStores调用刚才定义的方法名,然后传入相应的参数
    • 添加一个成功的闭包,闭包也有一个泛型,此泛型为先前准备的前端bean类型
  • 新建Activity

    • 继承自HSActivity,并实现contract.view接口,根据提示实现接口方法
      • createLayoutId返回Activity的不就文件的id,故需要提前准备一个布局,布局不在赘述
      • createPresenter是返回一个presenter,其中参数为this,原因是在新建Activity的时候已经实现了contract.view接口了,所以可以认为Activity是contactView的类型了

简单实战

以HS2.0的一个简单的列表为例,图例如下:


原型图
  • 简单分析

    • 首先控件是用RecyclerView
      • 需要进行item布局
      • 需要创建Adapter
    • 前台所需的字段大致为四个:头像,标题,昵称,副标题
    • 创建以上四个基础类
    • 通过假数据测试自己的程序
    • 创建后端bean,进行数据灌入
  • Adapter 的创建

    • 以往的Adapter创建大致分为以下几步
      • 前期准备:item的布局,对item赋值的模型类
      • 继承自RecyclerView.Adapter,有个泛型,泛型是Adapter一个内部类,一般命名为xxxAdapter.ViewHolder
      • 创建内部类,
        • 继承自RecyclerView.ViewHolder,
        • 创建与item的布局中相对应的控件类型的属性
        • 构造方法中参数为一个view(实际就是item的view),并且将属性与item的空间关联起来
    • 创建一个数据源属性,List的元素类型为刚才提到的item赋值的模型类
    • Adapter的构造方法参数与数据源属性相同,然后将其给睡醒赋值
    • 实现接口方法
    • RecyclerView 设置manager和adapter
    • 在HS2.0中杜小哥对齐进行了封装,使用方法如下
      • 继承自SimpleRecyclerAdapter<T>T是一个实体类模型,能包含item的所有的属性的类型的一个模型,在此我们沿用上文说的前端bean
      • 构造方法,参数主要是一个上下文和一个数据源集合,方法实现只要调用super就行了
      • 实现接口方法:getItemLayoutId,返回item的布局
      • 实现接口方法:bindData(SimpleRecyclerViewHolder holder, int position, T item),holder可以简单的等同于ViewHolder,position可以简单理解为索引,item就是数据源中具体的某个对象,此方法主要是为item赋值
  • 图片下载
    Android中图片下载使用的是Glide框架,应该是类似于iOS的 SDWebImage,原理暂时还不懂,应用杜小哥封装的方法

    • 封装方法中有有一个Drawable类型的参数,我开始以为直接通过R框架去取,但是发现不行,后来才知道静态资源要通过上下文间接去获得
    • bindData(SimpleRecyclerViewHolder holder, int position, T item)方法中的能通过holder间接获取到context,然后调用context.getResources().getDrawable(R资源)
  • 获取url的字符串的时候,要调用一下trim(),去除一下空格

  • 额外补偿一个知识点:在内部类情况下,内部类能默认拿到外部类的上下文,涉及到本例的话就是可以直接调用.getResources().getDrawable(R资源)

  • 双模型设计
    此种设计是在应对在后端接口资源尚未准备好的的前提下,防止出现互相等待,故采取前台后台双模型

    • 前台模型:前台模型主要是看前台界面需要那些字段,那些类型,进行一下预估,然后在需要的地方写一些假数据进行测试,用以测试功能是否完好

    • 后台模型:这里不错过多的赘述,即根据后来返回的json,进行相应字段拆解,但是模型书写上有特定的规范,是有网络框架决定,这个后面章节会有总结

    • 两端模型的数据交接:本例中主要是在Presenter中,在我们获取到又网络床架处理好的数据以后,在创建一个新的前端模型实例,然后由后端模型的实例对前端的模型实例进行赋值,需要那些就赋值那些

    • 后端模型的一些规范
      先上一段json


      json实例

      我们想要得到的数据就是json节点下的rows的数据结合,以及count的,用于后续刷新使用,按照以前iOS的Swift(因为OC可以使用KVC)的编程习惯,需要对rows中的元素追个手撕,但在目前安卓的框架中可以不这样写,大致书写格式如下:

data class MineDragenBean(
        var count: String,
        var rows: ArrayList<DragenInfo>) 
{
    data class DragenInfo(
            @SerializedName("story_id")
            var story_id: String,
            var name: String,
            var content: String,
            var image: String,
            var user: User,
            var link: String)
}

此bean是用kotlin的语法,外层将rowscount摘出来,然后rows属性是一个 ArrayList其中泛型为例DragenInfo,其中DragenInfo也是一个bean,即我们要取值的具体的模型。为了看清书写的具体结构,我将代码特意写成了类似C语言习惯,将括号的内部的内容写出

  • 整体流程串接
    前端

    • 分析设计图,预估前端模型,简单写一些假的数据
    • 创建contract类,虽然此时可能不知道具体的接口方法,但是由于后续的文件需要View接口,故先创建后续在使用
    • 创建Presenter,由于此时假定后端接口尚未准备后,所以在Presenter的处理网络返回数据的方法中,先造一些假数据
    • 创建 Activity
      • onCreate方法中对视图进行视图一些设置工作(也可以在wrapper中进行,本例中不涉及,放在后续文字中说明),以及调用Presenter的网络接口方法
      • 至于contract的接口方法,这个由具体的需求决定,一般来说就是数据的传递和设置

    前端的“后端”:假定后端接口准备后

    • 配置接口,在ApiStore
    • 创建后端bean
    • 修改Presenter,进行数据的交接

一些注意

主要接受一些在本次总结中的一些不成系统的但是很用的Android的编程习惯或者约定俗成的东西

  • 使用了ArrayList的属性要进行释放,下面的例子是在Activity的onDestroy方法中,这个要看具体的组件,如果其他控件中,记得再起销毁的生命周期中对其进行销毁
 @Override
    protected void onDestroy() {
        super.onDestroy();
        mDatas.clear();
        mDatas = null;
    }
  • 内部类中尽量不要做线程相关的操作,容易造成内训泄露
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,914评论 25 707
  • 上一章目录 接到二当家的命令后,数十人从船上跃下,坐上沙漠快艇,极速驶向那黄沙漫漫的沙丘。 九艘快艇乘风而行,沙漠...
    地无疆阅读 442评论 17 12
  • 终于又到了一周一次的餐饮课、上周做完柠檬水后我就一直在想这周乔老师会教我们做什么呢?是牙签肉、我最喜欢吃肉了、简直...
    刘美彤阅读 179评论 0 0
  • R(阅读段落--P65) 影响接受度的两个最主要的因素是内容和时间。人们只有在特定的时间内会表现出对特定物品的接受...
    鹰隼阅读 182评论 0 1