# 基于Android的天气APP
## 前言
项目:https://github.com/w77996/Weather
多知天气,主要是给大家学习一下。
项目主要是12月23日开始建立,春节半个多月回家了,就没有写了。三月初完成了整个项目。耗时近两个月。平时在公司也就做点测试的任务,开发的任务还得等到毕业后才有TAT不知道毕业后会不会被留下,所以也是练练手。基于Rxjava+Retrofif+Ok之后也写了一个是http+Mvp的阅读类APP,链接在这里:[HiReader](https://github.com/w77996/HiReader),项目还没有完全写完,一直在更新,主要是自己学习一些主流的东西。
---
## 感谢开源
看别人的代码慢慢学习,你会看到自己的成长的~
现在的我看这个毕业设计项目会觉得没有当初想的那么难了,可以用更高的效率,更好的方式去实现这个项目。
### 借鉴过的项目
[就看天气](https://github.com/xcc3641/SeeWeather)
[高仿雅虎天气](http://blog.csdn.net/way_ping_li/article/details/38963807)
还有郭神的第二行代码,不解释
### 开源框架
- Butterknife注解式框架 http://jakewharton.github.io/butterknife/
- Glide图片加载框架 https://github.com/bumptech/glide
- Okhttp网络请求框架 http://square.github.io/okhttp/
- LitePal数据库操作框架 https://github.com/LitePalFramework/LitePal
- Logger 开发日志框架 https://github.com/orhanobut/logger
- Gson json数据解析框架 https://github.com/google/gson
- SlidingMenu侧拉菜单框架 https://github.com/jfeinstein10/SlidingMenu
- SwipeMenuListView侧滑删除框架 https://github.com/baoyongzhang/SwipeMenuListView/
- 易源数据提供的天气数据 https://www.showapi.com/
- 极光推送服务 https://www.jiguang.cn/accounts/platform
- 有米广告平台 https://www.youmi.net/
- 高德地图 http://lbs.amap.com/
---
# 功能
1. 第一次打开APP引导页,缓冲加载
2. 天气信息的显示
3. 广告,推送
4. 桌面小工具
5. 新闻资讯的查看
6. 蓝牙串口传输温度
---
那时候还不大会使用Gson,简直就是Android开发的败笔呀~傻乎乎的自己去解析近千的json信息,也是醉了。
# 准备
易源数据中的天气Json如果请求的是15天的Json数据那有近千行,所以取自己有用的。
- 开发环境:Android studio
- 数据获取:易源数据SDK
## 帮助工具
[Json在线解析](http://www.json.cn/)
[易源数据官网](https://www.showapi.com/)
---
# Json数据分析
![image](http://img.blog.csdn.net/20161201125159764)
这么多Json,细思极恐啊~
不过我们一步步来分析,key的作用可以看易源的文档。
1. cityInfo 城市信息
2. time 时间
3. now 现在的天气
4. f1~f6 近一星期的天气预报信息
5. alarmList 预警信息
6. hourDataList 半小时更新一次的天气信息
7. aqi 空气质量
## 天气封装
在目录下新建com.weather.entity
其实觉得Gson挺好用的……
那我为何不用Gson呢。。。因为那时候还不会用@Serializedname,易源数据的json竟然还有用数字开头的key ┭┮﹏┭┮
然后经过了一番的倒腾,终于一个个把数据给对上了= =,当做自己解析json数据的练手吧
## 网络请求
主要是用okhttp,用到的是郭神的几行代码
```
public static void sendOkHttpRequest(String address, okhttp3.Callback callback) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);
}
```
直接传入地址就请求到数据了,
不过这边有个坑!!
有个坑!!!
有个坑!!!
重要的事情所三遍
在请求后不能直接使用response.body().string(),要缓存一下才能使用,不然为空。
```
//使用okhttp的封装进行请求
HttpUtil.sendOkHttpRequest(weatherUrl, new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
//这里有坑
String responseText = response.body().string();
```
## 数据库
本人数据库超级烂,不过不算渣渣,还是能写点东西,数据库我设计的十分简单,只有两个重要的属性,就是城市名和json数据,为的是在无网络状态下从数据库直接获取到json数据,解析后显示到界面上。
框架的话本来打算用GreenDao的,不过后面改成LitePal了。
```
public class WeatherDB extends DataSupport {
public int id;
public String mCityName;
public String mJsonData;
...
```
## 广告,推送
广告用的是有米广告,直接对着SDK把代码加进去就好了,想用腾讯的广告,但是打电话给我问我有没营业执照。。。。晕,没有所以没有审核通过。
推送使用的是极光推送,也是直接使用SDK,本来使用的是BOMB的,但是Bomb SDK中的okhttp和我自己的依赖起冲突了,而且还有一些机子无法推送成功,所以最后改成了极光推送,这都是血淋淋的坑啊,一步步踩过来简直吐血。
```
//广告条初始化
View bannerView = BannerManager.getInstance(WeatherActivity.this)
.getBannerView(WeatherActivity.this, new BannerViewListener() {
@Override
public void onRequestSuccess() {}
@Override
public void onSwitchBanner() {}
@Override
public void onRequestFailed() {}
});
// 获取要嵌入广告条的布局
LinearLayout bannerLayout = (LinearLayout) findViewById(R.id.ll_banner);
// 将广告条加入到布局中
bannerLayout.addView(bannerView);
```
嵌入广告就是这么简单暴力,但是建议用积分墙,我这个是广告条。。。。。
因为。。。
他们广告条好像没啥广告。。。可能在实际中显示不出来,不过在初始化时使用测试广告的话那就可以看到了。
## 城市选择
这里推荐别人写的一个依赖,直接传送门 [CityPicker](https://github.com/zaaach/CityPicker)
用的是高德地图定位
![image](https://raw.githubusercontent.com/w77996/BlogsImage/master/MoreKonwWeather/F31138F211A4AAC11E58A2579BF321BA.jpg)
## 桌面小工具
这方面我需要学习的东西还有很多的,开启服务在后台更新,想想后期如果能加入Rxjava,看看能不能优化一些操作,不过在使用Glide加载图片到AppWidget时需要获取到ImageView控件,所以有折腾了一下。
![image](https://raw.githubusercontent.com/w77996/BlogsImage/master/MoreKonwWeather/D3D307BF3279B61CF6206E23E7335A5F.jpg)
```
//通过APPWIdgetTarget获取到Image控件
mAppWidgetTarget =new AppWidgetTarget(getApplicationContext(),mRemoteViews,R.id.appwiget_picture,mAppwidgetId);
Glide.with(getApplicationContext()).load(weatherBean.getmNowWeatherBean().getmWeather_Pic()).asBitmap().into(mAppWidgetTarget);
```
## 蓝牙和单片机通信模块
因为本人学过嵌入式开发,在机缘巧合的时候接触了Android,所以现在做Android开发,单片机上使用的是DS18B20温度传感器,蓝牙是HC-05,通过串口进行温度传输,不要觉得很难,其实很简单,嗯,说笑的,基础好就很简单啦,代码并不多,曾经试过一次返回数据一直都是乱码,找了一个星期的问题都没找到,最后发现是波特率的问题,太感动了,[传送门](http://note.youdao.com/)
## 界面
进入APP加载界面,淡入淡出效果,弱引用持有Activity对象,文字动画效果
![缓冲界面](https://raw.githubusercontent.com/w77996/BlogsImage/master/MoreKonwWeather/1110
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计项目:基于 Android 的天气 APP (692个子文件)
ViewPagerIndecatorLibrary-debug.aar 60KB
ViewPagerIndecatorLibrary-release.aar 60KB
SlidingMenulibrary-debug.aar 46KB
SlidingMenulibrary-release.aar 46KB
MediaSessionCompat.aidl 807B
ParcelableVolumeInfo.aidl 707B
PlaybackStateCompat.aidl 706B
MediaMetadataCompat.aidl 698B
ResultReceiver.aidl 694B
RatingCompat.aidl 691B
resources-debug-androidTest.ap_ 21KB
resources-debug-androidTest.ap_ 3KB
多知天气.apk 7.32MB
app-release.apk 7.31MB
gradlew.bat 2KB
TitlePageIndicator.class 21KB
TitlePageIndicator.class 21KB
CustomViewAbove.class 21KB
CustomViewAbove.class 21KB
SlidingMenu.class 19KB
SlidingMenu.class 19KB
CirclePageIndicator.class 13KB
CirclePageIndicator.class 13KB
CustomViewBehind.class 12KB
CustomViewBehind.class 12KB
LinePageIndicator.class 11KB
LinePageIndicator.class 11KB
UnderlinePageIndicator.class 11KB
UnderlinePageIndicator.class 11KB
TabPageIndicator.class 8KB
TabPageIndicator.class 8KB
IconPageIndicator.class 5KB
IconPageIndicator.class 5KB
IcsLinearLayout.class 5KB
IcsLinearLayout.class 5KB
SlidingActivityHelper.class 4KB
SlidingActivityHelper.class 4KB
R$styleable.class 4KB
R$styleable.class 4KB
CanvasTransformerBuilder.class 4KB
CanvasTransformerBuilder.class 4KB
SlidingListActivity.class 3KB
SlidingListActivity.class 3KB
SlidingPreferenceActivity.class 3KB
SlidingPreferenceActivity.class 3KB
SlidingFragmentActivity.class 3KB
SlidingFragmentActivity.class 3KB
SlidingActivity.class 3KB
SlidingActivity.class 3KB
R$attr.class 2KB
R$attr.class 2KB
SlidingMenu$1.class 2KB
SlidingMenu$1.class 2KB
CanvasTransformerBuilder$3.class 2KB
CanvasTransformerBuilder$3.class 2KB
SlidingMenu$SavedState.class 2KB
SlidingMenu$SavedState.class 2KB
CanvasTransformerBuilder$5.class 2KB
CanvasTransformerBuilder$5.class 2KB
CanvasTransformerBuilder$4.class 2KB
CanvasTransformerBuilder$4.class 2KB
R$color.class 2KB
R$color.class 2KB
UnderlinePageIndicator$SavedState.class 2KB
UnderlinePageIndicator$SavedState.class 2KB
CirclePageIndicator$SavedState.class 2KB
CirclePageIndicator$SavedState.class 2KB
TitlePageIndicator$SavedState.class 2KB
TitlePageIndicator$SavedState.class 2KB
LinePageIndicator$SavedState.class 2KB
LinePageIndicator$SavedState.class 2KB
TitlePageIndicator$IndicatorStyle.class 2KB
TitlePageIndicator$IndicatorStyle.class 2KB
TabPageIndicator$1.class 2KB
TabPageIndicator$1.class 2KB
TitlePageIndicator$LinePosition.class 2KB
TitlePageIndicator$LinePosition.class 2KB
CanvasTransformerBuilder$6.class 2KB
CanvasTransformerBuilder$6.class 2KB
TabPageIndicator$TabView.class 1KB
TabPageIndicator$TabView.class 1KB
SlidingMenu$SavedState$1.class 1KB
SlidingMenu$SavedState$1.class 1KB
UnderlinePageIndicator$SavedState$1.class 1KB
UnderlinePageIndicator$SavedState$1.class 1KB
CirclePageIndicator$SavedState$1.class 1KB
CirclePageIndicator$SavedState$1.class 1KB
SlidingMenu$2.class 1KB
SlidingMenu$2.class 1KB
TitlePageIndicator$SavedState$1.class 1KB
TitlePageIndicator$SavedState$1.class 1KB
LinePageIndicator$SavedState$1.class 1KB
LinePageIndicator$SavedState$1.class 1KB
R$styleable.class 1KB
R$styleable.class 1KB
R$styleable.class 1KB
R$dimen.class 1KB
R$dimen.class 1KB
R$styleable.class 1KB
UnderlinePageIndicator$1.class 1KB
共 692 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
一枚务实的码农
- 粉丝: 474
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页