Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 【小項目】簡單天氣預報項目的實現與流程

【小項目】簡單天氣預報項目的實現與流程

編輯:關於Android編程

一直有人問我說,一個項目拿到需求以後怎麼去實現,還有一個app如何去構思,如何去下手,該從那裡去寫,這裡我來簡單的說下,這裡我們拿一個最簡單的天氣預報來說明。

宏觀上面來看一個項目怎麼開發的:

1.首先拿到一個項目後,客戶會給你很多他想要的功能和需求,這時候產品經理需要去分析和梳理用戶的需求,他會把最終梳理好的需求不斷的去和客戶溝通確定,最終直到客戶的需求明確下來;

2.接著產品經理會將明確下來的需求說給美工,美工進行原型圖設計,期間會設計其主題風格,logo,產品流程圖等,然後產品經理會再去和客戶溝通確定原型圖是否符合客戶的審美風格,直到客戶對所設計的頁面等認同,之後美工會給開發人員切圖等;

3.所有需求設計圖會給項目經理,項目經理再一次細化所有功能需求,並會開會發布新項目的需求,之後會考慮項目的整體架構與研發周期,確定之後將任務下發給程序猿,在開發周期內完成後,在進行不斷的項目測試,待測試完成後,與客戶交付項目並准備上線,之後的就是維護更新維護更新。

具體的流程還要看具體的公司,不過大致流程上是這樣的,不同的角色考慮不同的任務。

程序猿的任務開始

好了說了那麼多了,我們來說說以天氣預報為例子,作為一個新手如何來開發吧。

首先注意如下幾點:

1.統一命名,統一書寫

首先新建項目,項目的名字和規定的包名一般公司都是有規定的,如果沒有特定的要求,一般都是以“ 域名.公司名.App名字 ”來命名的,當然如果只有你一個人開發的話你可以隨意,但是如果有兩個人以上時候就需要統一包名了。

其次統一確定所有的Activity,控件ID,xml布局等命名,不統一的後果會很蛋疼,具體給出一篇博文來參考,僅供參考,你也可以自己來制定:

除了程序猿之間的命名方式,你還需要要求下美工給你切的圖片的名字,明確意思就好。

2.選擇好的架構

現在市面上有很多不錯的架構,你可以和你的技術團隊來選擇相應的架構來完成你的項目,但是切記一定要符合,不要隨意否則有可能大才小用,很簡單的項目使用了很復雜的架構來實現,一定要符合項目,常用的有MCV,MVP。

3.網絡接口(api)的制定

接口的意思就是說你通過不同的網絡請求(常用的get/post)向後台服務器端請求數據,服務器響應後返回給你一些你想要的數據,常用的數據格式有xml和json(解析數據必須要會),這個數據的格式最好來一起制定下;

還有一種情況可能直接在你開發的時候,後台就給你提供好了數據接口,這時候一定要熟悉開發時候給你的字段,或是哪裡的數據不是很好找後台同事去協商處理。

4.選擇合適你的第三方框架

很多項目中用到了第三方框架(簡單說框架別人封裝的一些庫,便利開發,或有你想要的服務,例如百度地圖api),選擇正確的框架還有合適的框架,例如圖片框架有些是專注於滑動加載圖片的,有的是專注於高質量顯示圖片的,至於哪個適合你,先了解下再去使用。

5.加密保證你的app安全

現在app的安全越來越值得關注,所以加密的app是至關重要的,幾個辛辛苦苦開發的app也許別人只用幾秒就KO你的app拿到你的代碼了,所以加密至關重要,常用的加密技術有混淆代碼,dex加密,第三方加密等,這個具體也要看你的項目,如果有關於政府方面的只能使用混淆等非第三方加密技術,如果公司允許且不涉及政府等項目時候可以使用第三方加密來保證app的安全,常用的有360加固,愛加密;反編譯工具有:dex2jar,JD-GUI。

好了開始來說說天氣預報這個簡單的小項目吧,也給新人們一個好的思路;

開始項目

首先項目名,包名等命名假設已經制定好,本項目使用了MVC傳統模式進行開發,這樣我認為更好理解。

SDK最低指定的是4.0 編譯版本為7.0

需求與原型圖:

設計一個天氣預報app,顯示地區,溫度,風力,顯示天氣信息以及其對應圖標,當請求失敗時候提示用戶失敗信息,斷網時候提示用戶重新連接網絡;

原型圖如下:

\

分別為加載完以及未加載狀態

首先分包如下:

\

如果分包的目錄和這種分包不一樣可以如下操作

\

說下分包:

App的入口類是MainActivity我一般不在裡面做復雜業務,可以加入閃屏動畫處理,其中有些包你可能開發時候根本就用不到,但是最好聲明出來,可能在日後用到;

Activity:

存放所有的activity

Adapter:

存放所有的適配器

Base:

存放所有的基類,封裝所有公共的特性

Bean:

存放所有的實體類

Constant:

存放所有的常量

Net:

存放所有有關網絡請求的操作

Utils:

存放所有的工具類

Widget:

存放所有的自定義組件

編寫的思路就是順序

Xml頁面 ---------------請求數據------------------顯示在頁面上

寫好布局文件以及綁定好控件ID -----編寫網絡請求工具類--------編寫網絡請求動作並且解析json數據-----將解析好的json數據顯示到xml上

這裡直來講核心的內容,首先前面的xml編寫以及id的綁定就不再闡述,來說下網絡以及xml數據獲取上面,首先這裡我找了一個第三方開源的接口,直接用即可,其鏈接如下:

網絡請求 天氣預報主站的網址:

http://www.k780.com/api/weather.future

天氣預報主站給出的示例接口網址:

http://api.k780.com:88/?app=weather.future&weaid=1&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json

其中我把網絡請求分為網絡請求類,網絡請求方法類,json數據解析類,其主要代碼如下:

	/**
	 * 解析天氣信息工具類
	 * 
	 * @param handler
	 * @throws JSONException
	 */
	public static ArrayList parserJsonUtils(String result, Handler handler) throws JSONException {
		ArrayList list = new ArrayList();
		JSONObject object = new JSONObject(result);
		if (object.getString("success").equals("1")) {// 成功獲取
			// 解析開始
			JSONArray res = object.getJSONArray("result");
			for (int i = 0; i < res.length(); i++) {
				WeatherBean bean = new WeatherBean();
				bean.setDays(res.getJSONObject(i).getString("days"));
				bean.setWeek(res.getJSONObject(i).getString("week"));
				bean.setCitynm(res.getJSONObject(i).getString("citynm"));
				bean.setTemperature(res.getJSONObject(i).getString("temperature"));
				bean.setWeather(res.getJSONObject(i).getString("weather"));
				bean.setWeather_icon(res.getJSONObject(i).getString("weather_icon"));
				bean.setWind(res.getJSONObject(i).getString("wind"));
				bean.setWinp(res.getJSONObject(i).getString("winp"));
				list.add(bean);
			}
			Message msg = handler.obtainMessage();
			msg.what = MsgConstant.SUCCESS;// 成功
			msg.obj = list;
			handler.sendMessage(msg);
		} else if (object.getString("success").equals("0")) {
			// 解析失敗的原因並返回給WeatherActivity中的Handler
			Message msg = handler.obtainMessage();
			msg.what = MsgConstant.FAILED;// 失敗
			msg.obj = object.getString("msg");
			handler.sendMessage(msg);
		} else {
			// 斷網等情況
			Message msg = handler.obtainMessage();
			msg.what = MsgConstant.ERROR;// 錯誤未獲取到json數據
			handler.sendMessage(msg);
		}
		return list;
	}
		/***
		 * 網絡請求 
		 * 1.請求json數據 
		 * 2.解析到ArrayList中 
		 * 3.返回數據顯示
		 */
		new Thread(new NetRequest()).start();
	/**
	 * 網絡請求類
	 * 異步請求
	 * @author WindyStory
	 *
	 */
	class NetRequest implements Runnable {
		@Override
		public void run() {
			try {
				//發起請求
				String json = NetUtils.NetUtil("http://api.k780.com:88/?app=weather.future&weaid=1&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json");
				JsonUtils.parserJsonUtils(json, handler);
			} catch (JSONException e) {
				e.printStackTrace();
				// 斷網等情況
				Message msg = handler.obtainMessage();
				msg.what = MsgConstant.ERROR;// 錯誤未獲取到json數據
				handler.sendMessage(msg);
			}
		}

	}

因為在主線程上不能做耗時操作,所以這裡使用Thread與Handler來實現異步請求,首先在Thread中去獲取數據,獲取數據分為三種有網請求成功SUCCESS狀態,有網請求失敗FAILED狀態(如參數傳入不正確),以及無網絡時候的ERROR狀態,根據三種狀態來實現三種不同的狀態對應Handler的處理方式。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved