美文网首页安卓程序员fish的猿粪技术收藏
实践!业余时间做的一款阅读类App (MVP + RxJava

实践!业余时间做的一款阅读类App (MVP + RxJava

作者: wanbo_ | 来源:发表于2016-09-11 19:51 被阅读8713次
  • 整体项目基于 MVP + RxJava + Retrofit
  • 通过 Retrofit 实现了无网缓存
  • 基于 MVP 模式对 Activity 和 Fragment 封装了两个基类,同样适用于非 MVP 的实现。
  • 运用 RecyclerView 加载了多种复杂布局
  • 用到了一些很棒的第三方库
  • GitHub 项目地址 : https://github.com/Werb/GankWithZhihu

闪屏

  • 实现了类似于 Twitter 的闪屏动画,中间的小太阳可以扩大到中心,进入主界面
  • 闪屏中的字体叫做 old English , 纽约时报专用字体
zhigan.png

一些有意思的地方

  • 知乎日报的详细详细界面,不是采用 webView 加载 url路径实现的,而是根据 api 返回的 html 标签代码,拼接 Css 和 JS 实现的,很有意思,我分析知乎这样做的原因,应该是为了实现在无网状态下,同样可以保持阅读体验
  • 各种API返回的数据格式都很复杂,特别是好奇心日报,不单单是list集合,所以在项目中,使用 RecyclerView 加载了很多复杂布局,特别是实现了如何根据数据来判断布局的加载
  • 从开始学习到第一次使用 MVP + RxJava + Retrofit 开发项目,真正体会到了它的方便与强大之处
  • 项目中,有很多代码是可以重复利用的,为了更好的体会 MVP 思想,我目前还没有重构,后续会根据功能进行优化
  • 目前对内存优化问题,我控制的不是很好,如果有在这方面有经验很擅长的同学,希望可以联系我
detaildetail

很高兴你看到这里

有时候啊 你总是在追赶前面的人
总是抱怨自己为什么不能再努力一点
累了你可以停下来 看看原来的自己
其实你已经很了不起了。

aboutmeaboutme

License

  • 感谢开源项目 ZhihuDailyPurify
  • 感谢 gank.io
  • 感谢 MeiZhi
  • 同时希望可以帮助到其他人
  • 项目中用到的 api 所有权归 知乎,gank.io,好奇心日报所有,本项目仅是用来学习使用
Copyright 2016 Werb

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Contact Me

相关文章

网友评论

  • 万象归真:厉害了!楼主的mvp架构是怎么学的,我怎么看你的代码好吃力?能指点下吗
    万象归真:@wanbo_ 有墙
    wanbo_: @万象归真 邀请链接 http://band.us/n/adadU7V8pdO6P
    wanbo_: @万象归真 我建了一个 Band 可以来这里和我讨论有关 Android 和 Kotlin 好玩的事情😁
  • MigrationUK:lastVisibleItem + 1 == layoutManager.getItemCount() 为什么加1就可以判断有数据呢?
    MigrationUK:@听任蔓草堙路 明白了,谢谢
    wanbo_:@MigrationUK 不是加一判断有数据,而是判断当到达最后一个item的时候,触发上滑加载更多这个动作,这里并不判断有没有数据。
  • 平凡而简单:最近一直在看RxJava和Retrofit但是看到里面用到Rxjava回调的写法经常这样写:zhihuApi.getBeforetNews(time)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(newsTimeLine -> {
    disPlayZhihuList(newsTimeLine,context,zhihuFgView,mRecyclerView);
    },this::loadError)
    这样写
    subscribe(newsTimeLine -> {
    disPlayZhihuList(newsTimeLine,context,zhihuFgView,mRecyclerView);
    },this::loadError);
    这种写法依赖什么类库还是???不明白,为什么可以这样写
    chain -> {} ????
    还有后的this::loadError是请求错误的回调,这种写法??
    平凡而简单:@听任蔓草堙路 这个我了解了,但是我在设置的时候出了问题请指教,现在项目变成类库的类型了!
    但是我导入你的项目可以使用lambda 写法,我的项目按照AS的提示设置了,也可以写,但是在运行时编译报错,我导入了apply plugin: 'me.tatarka.retrolambda'提示找不到什么??
    我的JDK是1.8.0_75 还有什么需要设置吗,还是文件配置不全!
    wanbo_:@平凡而简单 这是jdk8的lambda表达式写法,上网查一下就很容易懂,如果你的AS项目是依赖jdk8的话,as会自动提示你写成这种格式。
  • fendo:GankWithZhihu-master\src\main\java\com\werb\gankwithzhihu\bean\gank\GankData.java:19: Syntax error on token "Invalid Character", delete this token

    这几行报错这么解??

    public List<Gank> 休息视频;
    public List<Gank> 前端;
    public List<Gank> 拓展资源;
    public List<Gank> 福利;
    public List<Gank> 瞎推荐;

    Syntax error on token "Invalid Character", delete this token
    wanbo_:@fendo 1025004680
    fendo: @听任蔓草堙路 解决了,你q多少啊
    wanbo_:@fendo 你这样问我也看不出来是什么原因啊,要不你加我Q。
  • fendo:报一堆错。。。。特别是这种错:
    The serializable class Meizhi does not declare a static final serialVersionUID field of type long
    wanbo_:@fendo 这是序列化的问题,serialVersionUID是序列号时自动生成的一段字符串,java里面的知识。
  • 52a13bb25359:厉害👍
  • UP7CR:good
  • 2a3af0d87126:tong hang
  • 慧明小和尚下山去化斋:我在使用GankActivity看优酷视频的时候,就是为所欲为那个视频,没看完,然后点击后退,结果音频还在播放
    wanbo_:@SimonHC 问题已经解决啦,代码已更新
    wanbo_:@SimonHC 是吗?我一会检查一下是什么问题:smile:,谢谢反馈
  • 亮砖:(๑•ั็ω•็ั๑)
    wanbo_:@唐纳德的唐 :sunglasses:
  • qmr777:知乎这个css好坑爹😂以前做练手app的时候想了挺久才搞定了网页样式
    wanbo_:@qmr 一切都是有它存在的理由的:smile:
  • ca8df192f75c:厉害,学习了
  • 于连林520wcf:厉害啊
    wanbo_:@于连林520wcf 啊哈哈哈,你可是我关注的大神啊,谢谢夸奖
  • 十二点方向:请问,博主,你那个从那个网络爬取 ,好奇心日报 API 是自己爬取所得。
    使用pythonm吗
    十二点方向:直接获取他的接口API 你是通过什么方法的 能分享下吗
    iOS_愛OS:也就是说,接口是手动抓取的???
    wanbo_:@十二点方向 就是用普通的方法爬出它的接口地址,直接访问的,还没有学习python...但据我理解,python应该是对内容的爬取,就是我知道它的地址,根据我的规则爬取我需要的数据,再保存下来
  • AI信仰者:继续加油
  • 回希:喜欢
  • VH2016:赞
  • Allen_LQM:非常不错,多谢分享
  • 42a47d114fa7:这下就尴尬了呀兄弟
  • e95573494e5a:安卓的。。。
  • AbelSu:很可以啊~👍
  • a646057832d5:写的很好!我也是学IT的,今年就要实习了,希望能向作者多学习

本文标题: 实践!业余时间做的一款阅读类App (MVP + RxJava

本文链接:https://www.haomeiwen.com/subject/jeguettx.html