基於第一行代碼CoolWeather的小白天氣開發

小白天氣開發練習

小白基於guolin大神第一行代碼CoolWeather開發,最後附上github鏈接

數據來源

通過和風天氣獲取天氣預報 https://id.heweather.com/
全國省市縣數據 http://guolin.tech/api/china
Json數據解釋 https://dev.heweather.com/docs/api/weather

CoolWeather目錄結構

在這裏插入圖片描述

用例圖&時序圖

在這裏插入圖片描述
在這裏插入圖片描述

效果圖

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

軟件概述

名稱:小白天氣
詳細說明:無廣告,簡單輕量化天氣APP,隨時查看實時天氣和未來天氣預報。
用途:定位所在城市,展示本地或其他城市實時天氣和未來一段時間的天氣預報。
類型:Android天氣類應用工具

主要功能

顯示所選城市的天氣信息。包括實時天氣,未來一週天氣,生活建議等。
添加,管理,切換,刪除城市功能。
背景根據天氣改變。
定位當前城市並顯示天氣。
首頁天氣和城市列表均可下拉刷新

源碼解析

在這裏插入圖片描述
xiaobai_weather
│ ChooseAreaFragment.java–//選擇城市的碎片
│ MainActivity.java----------------//主活動
│ WeatherActivity.java-----------//首頁活動

├─city_manager
│ CityActivity.java-------------//城市管理界面活動
│ CityManagerAdapter.java//城市信息適配器
│ DeleteCityActivity.java----//城市刪除界面活動
│ DeleteCityAdapter.java—//城市刪除信息適配器

├─db
│ City.java----------------------//城市信息類
│ County.java------------------//縣市信息類
│ DatabaseBean.java-------//省市縣操作類
│ DBHelper.java--------------//數據庫操作
│ DBManager.java-----------//數據庫操作
│ Province.java---------------//省信息類

├─gson-------------------------//解析json信息的類
│ AQI.java
│ Basic.java
│ Forecast.java
│ Lifestyle.java
│ Now.java
│ Suggestion.java
│ Update.java
│ Weather.java

├─service
│ AutoUpdateService.java//後臺服務類

└─util
HttpUtil.java-----------------//網絡請求
IconUtils.java---------------//圖標轉化爲對象
NetworkUtil.java-----------//判斷網絡狀態
Utility.java-------------------//JSON數據解析成Weather實體類

具體函數介紹之後再補吧……

編碼中的問題

首頁天氣顯示模塊

實現說明:

首頁天氣是小白天氣的主要展示部分。主要設置MainActivity和WeatherActivity,此處需要涉及數據庫操作。

編程記錄:

啓動時顯示城市問題:在程序中如何保存之前的狀態,城市數據是保存在數據庫中的,但是要保存一個首頁顯示的城市,需要再新建一張表,而這裏其實只是每次啓動時用一次。所以這裏我用SharedPreferences來保存一條展示的數據,這樣再次啓動時,從這條SharedPreferences中獲取信息啓動。

未來一週天氣顯示問題:通過API獲取的json數據怎麼放在ListView中顯示,這裏通過借鑑第一行代碼裏的示例,我用一個itemLayout佈局來設置每一條數據,然後再放到ListView中。

天氣圖標顯示問題:對於ImageView的圖片設置,在Java中需要傳入資源名稱,但是因爲我的圖片需要根據參數動態設置,setImageResource不支持這種輸入。我構造IconUtils類,通過函數接收參數,然後返回資源名稱,再setImageResource設置。

本地天氣模塊

實現說明:

本地天氣是通過手機定位確定用戶所在的位置城市,然後向用戶展示當前城市的天氣信息。本程序採用的是高德SDK定位。

編程記錄:

本地天氣入口問題:用戶怎樣打開本地天氣界面,這是我採用的是通過在首頁上設置一個圖片按鈕,用戶點擊按鈕後,首頁顯示該城市的天氣情況。

手機定位問題:開始時我打算用API通過ip定位的方式確定用戶的位置。但是容易出錯誤,API也不太好用,所以我又換了高德的SDK,通過網絡、GPS綜合定位。定位精確。

添加城市模塊

實現說明:

添加城市我這裏選擇的方案是通過省市縣逐級選擇,城市數據源於guolin服務器,通過碎片的形式左側滑出,選擇後跳轉主界面。

編程記錄:

頁面跳轉問題:在點擊城市時,需要進行跳轉,此時需要攜帶信息,而且要把之前活動的內存棧清空,再開一個新棧,防止返回時再跳轉其他界面。

城市管理模塊

實現說明:

城市管理界面顯示儲存的城市列表,點擊城市即可跳轉該城市。城市列表具有添加和刪除功能。在顯示城市時,還顯示天氣和溫度等,下拉界面可刷新。

編程記錄:

在無網絡時出現閃退:在WeatherActivity中增加網絡判斷,在無網絡時,禁止跳轉其他頁面,我這裏設置的是隱藏跳轉按鈕,並且提示無網絡。

城市列表的刷新:這裏是對城市列表的每一項進行處理。複用requestWeather,讓每個城市請求一次天氣信息,並保存數據庫。

頁面背景問題:保持與首頁同步,即根據天氣和時間變化背景。

源碼鏈接

https://github.com/Xbean1028/XiaoBai_Weather

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章