这么多 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
用的是高德地图定位