_java
最初上線是在2015年10月,是本身第一個較爲成熟的應用,開發完以後恰好答了知乎這篇如何自學Android編程android
可是由於代碼確實寫的很爛,因此決定所有重構代碼全新風格的展現就看天氣Ver2.0.git
固然本身也在學習之中,若是發現有任何問題和建議,隨時歡迎Email或者開Issuesgithub
注意:要pull下來運行須要本身申請和風天氣的key,寫在Setting裏。面試
開源不易,但願能給個Star鼓勵express
項目地址:https://github.com/xcc3641/SeeWeatherapache
項目主頁發佈issue: https://github.com/xcc3641/SeeWeather/issues編程
本項目爲開源項目,技術交流能夠經過郵箱聯繫: Hugo3641@gmail.com緩存
就看天氣——是一款遵循Material Design風格的只看天氣的APP。無流氓權限,無自啓,xxx,用最少的權限作最優的體驗。網絡
卡片展示(當前天氣狀況,將來幾小時天氣狀況,生活建議,一週七天概況)
補全城市(初版本由於本身偷懶因此城市有缺陷對不起各位)
自動定位
緩存數據,減小網絡請求,保證離線查看
內置兩套圖標(設置裏更改)
彩蛋(自動夜間狀態)
_
權限說明
<!--用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!--用於訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!--獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!--用於訪問網絡,網絡定位須要上網--> <uses-permission android:name="android.permission.INTERNET"/> <!--用於讀取手機當前的狀態--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!--寫入擴展存儲,向擴展卡寫入數據,用於寫入緩存定位數據--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Fir.im: http://fir.im/seeWeather
豌豆莢:http://www.wandoujia.com/apps/com.xiecc.seeWeather
魅族應用中心: http://developer.meizu.com/console/apps/detail/6530883
酷安市場:http://www.coolapk.com/apk/com.xiecc.seeWeather
v2.0
重構代碼,全新UI,升級體驗
就看天氣——是一款遵循Material Design風格的只看天氣的APP。無流氓權限,無自啓,xxx,用最少的權限作最優的體驗。
卡片展示(當前天氣狀況,將來幾小時天氣狀況,生活建議,一週七天概況)
彩蛋(自動夜間狀態)
補全城市(初版本由於本身偷懶因此城市有缺陷對不起各位)
緩存數據,減小網絡請求,保證離線查看
內置兩套圖標(設置裏更改)
v1.1
加固
兼容更多系統版本
v1.0
就看天氣V1.0
@圖片和信息來源於網絡,侵權刪
這學期有點忙,須要花時間鞏固基礎,準備面試,可是本身仍是會抽空儘快作出這些功能的,謝謝你們理解和支持
[ ] 桌面小部件
[ ] 通知欄提醒
[ ] 更好,更多的天氣ICONS
[ ] 管理城市(多城市選擇)
[x] 自動定位
[ ] 自由定製的Item界面
_
天氣數據來源於:和風天氣
城市信息來源於:CSDN
地理定位服務: 高德地圖
就看天氣的網絡部分的支持是用RxJava+RxAndroid+Retrofit+Gson
再加上ACache
緩存
/** * <p/> * 首先從本地緩存獲取數據 * if 有 * 更新UI * else * 直接進行網絡請求,更新UI並保存在本地 */ private void fetchData() { observer = new Observer<Weather>() { //節約篇幅,已省略 ... }; fetchDataByCache(observer); } /** * 從本地獲取 */ private void fetchDataByCache(Observer<Weather> observer) { Weather weather = null; try { weather = (Weather) aCache.getAsObject("WeatherData"); } catch (Exception e) { Log.e(TAG, e.toString()); } if (weather != null) { //distinct去重 Observable.just(weather).distinct().subscribe(observer); } else { fetchDataByNetWork(observer); } } /** * 從網絡獲取 */ private void fetchDataByNetWork(Observer<Weather> observer) { String cityName = mSetting.getString(Setting.CITY_NAME, "重慶"); RetrofitSingleton.getApiService(this) .mWeatherAPI(cityName, key) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) ////節約篇幅,已省略 ... }
就像洪洋說的同樣
總體上看RecyclerView架構,提供了一種插拔式的體驗,高度的解耦,異常的靈活,經過設置它提供的不一樣LayoutManager,ItemDecoration , ItemAnimator實現使人瞠目的效果。
該項目中用到RecyclerView中級的用法是根據itemType展現不一樣的佈局,這就是主頁核心的代碼了。
@Override public int getItemViewType(int position) { if (position == TYPE_ONE) { //標識 ... } return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_ONE) { //綁定 ... } } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof NowWeatherViewHolder) { //更新佈局 .... } }
_
感謝開源,學習到了前輩們優秀的代碼
特別感謝簡書猿圈
簡書:http://www.jianshu.com/users/3372b4a3b9e5/latest_articles
知乎:https://www.zhihu.com/people/xcc3641.github.io
我的博客: http://IMXIE.CC
_
_
Copyright 2016 HugoXie Licensed under the Apache License, Version 2.0 (the \"License\")
you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
圖片來源於網絡,版權屬於原做者。