作业解析-安卓weather app

目录

1. 作业题目………………………………………………………………

2. 作业目的……………………………………………………………..

3. 运行效果……………………………………………………………..

4. 实现过程……………………………………………………………..

5. 知识点巩固………………………………………………………….

6 知识拓展………………………………………………………………

7 学习建议………………………………………………………………

作业辅导解析

WEATHER FORECAST APP[作业标题]

25th February,2019[日期]

1.作业题目:[Assignment 上面随便复制一点]

In this assignment, we’ll adapt our weather app to gracefully deal with transitions in the activity lifecycle by incorporating an `AsyncTaskLoader`. You’ll also add some basic user preferences to the app.

There are a few different tasks associated with this assignment, described below. This repository provides you with some starter code that implements the connected weather app from assignment 2, plus a few extra layout bells and whistles.

2.作业目的:[作业的目的 1-3 个点都可以]

1、 掌握 android 的基础语法

2、 掌握 AsyncTaskLoader 的用法

3、 掌握 PreferenceFragment 的用法

3.运行效果: [运行结果截图]

image image

20J 9@26 25B

image

11:00:00

4C – broken clouds

image

4C – scattered clouds

image

C — scattered clouds

20922

image

nnnn

shanghai

Low: 8C High: 4C Wind: 2 MPH SE

Hum idity: 31 %

choose weather units

Imperial Metric Kelvin

image

4. 实现过程:[部分核心代码截图, 截图部分的代码 prefer 中英文 注释]

AsyncTaskLoader 的实现:

首先 MainAcitivity 需要继承 LoaderManager.LoaderCallbacks<>,其中有两个 函数需要实现,它们分别是:onCreateLoader,onLoadFinished。它们的代码分 别如下: image image 接下来介绍实现 AsyncTaskLoader 需要的另一个类:WeatherLoader,这个类需 要继承 AsyncTaskLoader<>。这个类里面有两个重要的方法需要实现,它们分别 是 onStartLoading 和 loadInBackground,它们的代码分别如下: image image 上面一共介绍了四个类,它们的调用顺序和功能如下:首先 MainAcitivity 中的 OnCreate 方法会调用 onCreateLoader 方法,onCreateLoader 函数得到访问网络 需要的 URL,返回一个 WeatherLoader 对象,并将刚才得到的 URL 作为参数传给 WeatherLoader 类。接着 onStartLoading 方法被调用,里面只有一行代码为 forceLoad(),这行代码能调用 loadInBackground 方法,loadInBackground 方 法使用 URL 地址访问网络请求并将得到的 json 数据转换为 ArrayList 格式,并 将该 ArrayList 格式的天气结果作为返回值。接下来 onLoadFinished 方法被调 用,该方法参数中的 forecastItems 参数就是刚才 loadInBackground 方法的返 回值。onLoadFinished 方法中用 forecastItems 更新 adapter 使得 RecyclerView 得以刷新。

User Preferences 的实现:

首先需要创建一个 SettingActivity 类,它的布局界面只有一个 LinearLayout。 然后我们需要创建一个继承自 PreferenceFragment 的类 PrefFragment,这个类 需要在 OnCreate 中加载一个名为 preferences.xml 的界面,加载界面的代码为: image 我们需要在 res 文件夹中新建一个名为 xml 的文件夹,并在 xml 文件夹中创建 preferences.xml,它的代码如下: image image 接着我们在 SettingActivity 的 OnCreate 方法中添加 PrefFragment,代码如下: image

这些代码的作用是为了让 preferences.xml 在 SettingActivity 的界面中显示出 来。

为了实现 README 中的这个要求:“currently-selected/set value should be displayed as the summary for the preference.”,我们需要在 PrefFragment 中使用一下代码: image 这 些 代 码 的 作 用 是 : 若 监 听 到 PreferenceScreen 中 存 在 改 变 , 则 从 SharedPreferences 中读取最新的已经改变的 units 值和 location 值,并将这 两个值赋予给对应组件的 summary 值。 还 有 一 点 需 要 注 意 , 每 次 打 开 SettingActivity 看 到 界 面 时 , 也 需 要 从 SharedPreferences 中得到最新的数据并展示到界面上,实现的代码如下: image 要实现 README 中的要求:“changing preferences results in new results being displayed and correct updates made to UI”,需要将原来代码中所有用到 WeatherPreferences 类的地方全部改为从 SharedPreferences 中获得最新的值。 并且在 SettingActivity 中还需要加入下面的代码: image 这个代码的作用就是在 SettingActivity 界面按下 back 返回按钮时,进入一个 新的 MainActivity,并销毁当前的 SettingActivity。这样就能更新界面的 UI 并重新从网络获取数据并展示在界面上,从而实现了 READEME 中的要求。