设为首页 收藏本站 662p开源网
开启辅助访问 切换到宽版

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 立即注册 找回密码

安卓教程网

新浪微博达人勋

注册会员

144

积分

42

威望

7

金钱

Rank: 2

积分
144
发表于 2018-7-13 16:34:56 | 显示全部楼层 |阅读模式
更多
引言

学习《android第一行代码》根据书本开发的天气预报app,主要用于熟练操作android开发(android studio3.0平台)。

今天主要分享一下从服务器上获取天气信息,通过ListView绑定数据的操作(可以采用RecycleView),然后进行页面点击跳转。

一、 服务器返回数据预览

通过本书作者提供的访问地址,guolin.tech/api/china,直接打开可以访问到全国各地的天气信息,guolin.tech/api/china/16/116

[url=][/url]
[
{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"天津"},{"id":4,"name":"重庆"},
{"id":5,"name":"香港"},{"id":6,"name":"澳门"},{"id":7,"name":"台湾"},{"id":8,"name":"黑龙江"},
{"id":9,"name":"吉林"},{"id":10,"name":"辽宁"},{"id":11,"name":"内蒙古"},{"id":12,"name":"河北"},
{"id":13,"name":"河南"},{"id":14,"name":"山西"},{"id":15,"name":"山东"},{"id":16,"name":"江苏"},
{"id":17,"name":"浙江"},{"id":18,"name":"福建"},{"id":19,"name":"江西"},{"id":20,"name":"安徽"},
{"id":21,"name":"湖北"},{"id":22,"name":"湖南"},{"id":23,"name":"广东"},{"id":24,"name":"广西"},
{"id":25,"name":"海南"},{"id":26,"name":"贵州"},{"id":27,"name":"云南"},{"id":28,"name":"四川"},
{"id":29,"name":"西藏"},{"id":30,"name":"陕西"},{"id":31,"name":"宁夏"},{"id":32,"name":"甘肃"},
{"id":33,"name":"青海"},{"id":34,"name":"新疆"}
][url=][/url]

如上面看到的可以获取到各省的信息,通过id可以进一步的获取市县的信息。

二、创建本地数据存储

根据服务器中获取的数据属性,创建Province、City、County三个数据表分别存储省、市、县的信息。

创建数据表采用Litepal,这里需要导入外部库,需要在build.gradle中添加

implementation 'org.litepal.android:core:1.4.1'
(注implemention为android3.0以上版本才有的,与compile并不完全一样,这里不多做解释,2.0版本采用compile不影响
同时在加载外部库时可能出现无法引用的问题,请清理项目后重新build)

后面1.4.1是版本号,可以查询官网获取最新版本

下面附上三个数据表类,由于是采用Litepal需要继承DataSupport




Province省数据表
City市数据表
County县数据表
这三个类用来生成本地数据库
接下来新建一个litepal.xml配置文件,在main目录下新建assets配置文件夹,添加litepal.xml
litepal.xml
此文件通过Litepal创建了cool_weather数据库同时添加了三个数据表
最后在androidmanifest.xml中添加LitepalApplication,如下
这样Litepal可以全局调用Context,注意如果不加,默认启动时会初始化Application类
三、编写工具包类

3.1HttpUtilHttpUtil.class

主要用来想服务器发送请求,创建request并设置好其地址,通过client发起请求并设置callback回调请求

3.2UtilityUtility.class

主要处理从服务器返回的数据,根据最开始的数据预览可以看到,服务器返回的数据是以Json格式输出的

那么这个工具类就是对json数据的分析处理,通过JSONArray数组将json数据保存在本地数据库

有这里的json数据比较简单,直接进行解析,不采用GSON

四、创建碎片布局

碎片有利于代码的复用,可以尝试将自己的很多功能都通过碎片进行封装

创建碎片会生成两个文件,一个是碎片的布局文件choose_area.xml,一个是ChooseAreaFragment.class

4.1布局文件choose_area.xml

简单的两个布局,整体用线性布局垂直对齐方式,头部标题栏采用RecycleLayout布局,设置一个回调按钮和一个标题文本框

底部一个listview用来显示天气列表

4.2ChooseAreaFragment.classChooseAreaFragment

这里我把不需要用到的方法删除,只留下onCreateView和onActivityCreated这两个方法

一个表示创建布局,主要用来加载布局同时对部分数据进行初始化

onActivityCreated显然是在布局加载完之后才触发的,主要的功能都在这里面实现

主要实现的是listview的跳转功能,判断当前是那一级别的数据从而点击时获取下一级别的数据,

如当前点击“江苏”,首先返回按钮显示,标题改为“江苏”,然后优先查询数据库信息,当没有找到时再向服务器发送请求

五、主活动中加载碎片

修改main布局中的文件

通过name在初始化时运行碎片

layout

注意由于碎片中设置过标题,需要在styles.xml中修改默认标题

最后需要设置网络访问权限(Androidmanifest.xml)


您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Archiver|手机版|小黑屋|安卓教程网 ( 粤ICP备12089784号  

GMT+8, 2018-10-15 23:42 , Processed in 0.467439 second(s), 45 queries .

Powered by Discuz X3.1

© 2001-2013 IOS教程网

快速回复 返回顶部 返回列表