开源APP项目代码分析(4)- 天气类
2017-03-04 16:58
435 查看
这次分析的是泡在网上的日子里面关于天气类的APP,相关APP如下:
FakeWeather
CoolWeather
SeeWeather
RxWeather
通过对这些相关APP的整理,了解相关的功能实现。
天气,自动定位当前城市,获取天气信息,支持分享和 TTS 语音播报
公交,定位搜索附近线路和站台,支持手动查询和收藏(仅苏州)
闲读,阅读最新科技资讯,读那些值得读的
福利,大量妹子图,你懂的,还不赶紧上车
卡片展现(当前天气情况,未来几小时天气情况,生活建议,一周七天概况)
缓存数据,减少网络请求,保证离线查看
内置两套图标(设置里更改)
Permission.java(Permission是定义的权限model类,用来存放权限名称以及是否获取权限的信息)
RxPermissions.java(RxPermissions就是最主要的类了,利用RxJava提供权限请求)
RxPermissionsFragment.java(用来请求权限)
代码调用片段:
bindToLifecycle()方法
在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。
保存信息
查询信息
删除信息
数据存储对象
常用注解:
@Table(“class”)指定表名是class
@NotNull 字段不能为空
@PrimaryKey(AssignType.AUTO_INCREMENT) 主键自增长
此项目还涉及将db导入到本地SQLite
2.主界面MainActivity MainFragment(当前城市界面)和MultiCityFragment(多城市管理)
3.NavigationView MainActivity(主界面)
SettingActivity(设置界面)
AboutActivity(关于界面)
ChoiceCityActivity(城市选择界面)
FakeWeather
CoolWeather
SeeWeather
RxWeather
通过对这些相关APP的整理,了解相关的功能实现。
FakeWeather
简介
『假装看天气』─── 天气预报 & 公交查询 & 资讯阅读 & 妹纸福利 的 Android 客户端天气,自动定位当前城市,获取天气信息,支持分享和 TTS 语音播报
公交,定位搜索附近线路和站台,支持手动查询和收藏(仅苏州)
闲读,阅读最新科技资讯,读那些值得读的
福利,大量妹子图,你懂的,还不赶紧上车
使用的开源库
相关亮点
1)界面布局框架
SeeWeather
简介
就看天气——是一款遵循Material Design风格的只看天气的APP。卡片展现(当前天气情况,未来几小时天气情况,生活建议,一周七天概况)
缓存数据,减少网络请求,保证离线查看
内置两套图标(设置里更改)
使用的开源库
序号 | 开源库 | 简要说明 |
---|---|---|
1 | rxjava+retrofit+okhttp+gson+glide+butterknife | 此处忽略 |
2 | com.trello:rxlifecycle:0.7.0 com.trello:rxlifecycle-android:0.7.0 com.trello:rxlifecycle-components:0.7.0 | rxlifecycle管理rxjava生命周期 |
3 | com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar | 权限管理库 |
4 | lite-orm | 轻量级orm框架 |
5 | systembartint | 调节android状态栏透明度 |
6 | bughd SDK | 实时监控APP崩溃日志工具 |
7 | AMap_location | 百度地图 |
相关亮点
1)rxpermissions 权限管理
此开源库只有三个类:Permission.java(Permission是定义的权限model类,用来存放权限名称以及是否获取权限的信息)
RxPermissions.java(RxPermissions就是最主要的类了,利用RxJava提供权限请求)
RxPermissionsFragment.java(用来请求权限)
代码调用片段:
RxPermissions.getInstance(getActivity()).request(Manifest.permission.ACCESS_COARSE_LOCATION) .subscribe(granted -> { if (granted) { location();//高德定位 } else { load();//网络请求默认城市天气 } });
2)rxlifecycle 权限管理
Activity/Fragment需继承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。bindToLifecycle()方法
在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。
/** * 从网络获取 */ private Observable<Weather> fetchDataByNetWork() { String cityName = SharedPreferenceUtil.getInstance().getCityName(); return RetrofitSingleton.getInstance() .fetchWeather(cityName) .compose(this.bindToLifecycle()); }
3)liteOrm数据库框架
liteOrm初始化private OrmLite() { if (sLiteOrm == null) { sLiteOrm = LiteOrm.newSingleInstance(BaseApplication.getAppContext(), C.ORM_NAME); } sLiteOrm.setDebugged(BuildConfig.DEBUG); }
保存信息
OrmLite.getInstance().save(new CityORM(city));
查询信息
OrmLite.getInstance().query(CityORM.class)
删除信息
OrmLite.getInstance().delete(new WhereBuilder(CityORM.class).where("name=?", city));
数据存储对象
@Table("weather_city") public class CityORM { // 指定自增,每个对象需要有一个主键 @PrimaryKey(AssignType.AUTO_INCREMENT) private int id; @NotNull private String name; public CityORM(String name) { this.name = name; } public int getId() { return id; } public String getName() { return name; } }
常用注解:
@Table(“class”)指定表名是class
@NotNull 字段不能为空
@PrimaryKey(AssignType.AUTO_INCREMENT) 主键自增长
此项目还涉及将db导入到本地SQLite
4)界面布局框架
1.欢迎界面SplashActivity2.主界面MainActivity MainFragment(当前城市界面)和MultiCityFragment(多城市管理)
3.NavigationView MainActivity(主界面)
SettingActivity(设置界面)
AboutActivity(关于界面)
ChoiceCityActivity(城市选择界面)
相关文章推荐
- 开源APP项目代码分析(1)- OpenEyes、Plaid、GitHot
- 开源APP项目代码分析(3)- 生活记事本
- 开源APP项目代码分析(2)- Owspace和MusicDNA
- DIOCP开源项目 API代码的封装和流程分析
- 对搜索引擎开源项目的代码分析——索引(2)
- 对搜索引擎开源项目的代码分析——文档抓取
- 短视频 | 问答开源项目解读之整体代码流程和问题分析
- 8/人天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已完整开源于 Github)
- Android 开源项目代码分析思路
- 开源APP项目源码分析(6)- 干货电影资讯类
- xrdp开源项目的代码分析
- 开源项目kcws代码分析--基于深度学习的分词技术
- 开源APP项目源码分析(5)- 音乐播放器类
- 开源项目kcws代码分析--基于深度学习的分词技术
- 开源项目kcws代码分析--基于深度学习的分词技术
- 包括后台的Android美食APP项目开源代码,androidapp
- 对搜索引擎开源项目的代码分析——索引(1)
- xrdp开源项目的代码分析-1
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(十四):ASP.NET2.0实现无刷新客户端回调的Callback机制及例子代码下载
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(九):SharpMap中Styles和Geometries名称空间下有关类的分析