您的位置:首页 > 移动开发

开源APP项目代码分析(4)- 天气类

2017-03-04 16:58 435 查看
这次分析的是泡在网上的日子里面关于天气类的APP,相关APP如下:

FakeWeather

CoolWeather

SeeWeather

RxWeather

通过对这些相关APP的整理,了解相关的功能实现。

FakeWeather

简介

  『假装看天气』─── 天气预报 & 公交查询 & 资讯阅读 & 妹纸福利 的 Android 客户端

  天气,自动定位当前城市,获取天气信息,支持分享和 TTS 语音播报

  公交,定位搜索附近线路和站台,支持手动查询和收藏(仅苏州)

  闲读,阅读最新科技资讯,读那些值得读的

  福利,大量妹子图,你懂的,还不赶紧上车

  

使用的开源库

相关亮点

1)界面布局框架

SeeWeather

简介

  就看天气——是一款遵循Material Design风格的只看天气的APP。

  卡片展现(当前天气情况,未来几小时天气情况,生活建议,一周七天概况)

  缓存数据,减少网络请求,保证离线查看

  内置两套图标(设置里更改)

使用的开源库

序号开源库简要说明
1rxjava+retrofit+okhttp+gson+glide+butterknife此处忽略
2com.trello:rxlifecycle:0.7.0
com.trello:rxlifecycle-android:0.7.0
com.trello:rxlifecycle-components:0.7.0
rxlifecycle管理rxjava生命周期
3com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar权限管理库
4lite-orm轻量级orm框架
5systembartint调节android状态栏透明度
6bughd SDK实时监控APP崩溃日志工具
7AMap_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.欢迎界面SplashActivity

  2.主界面MainActivity  MainFragment(当前城市界面)和MultiCityFragment(多城市管理)

  3.NavigationView   MainActivity(主界面)

            SettingActivity(设置界面)

            AboutActivity(关于界面)

            ChoiceCityActivity(城市选择界面)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: