第二篇了.
本篇要講的是數據獲取.
為什么將數據獲取放在第二篇就講呢?
因為我在看別人教程的時候都是先講控件的屬性,然后怎么用控件開始.
可是畢竟咱們也是有一定開發經驗的人..所以很自然就想先知道怎么從網絡上獲取數據(畢竟現在開發的軟件一般都是需要聯網來運行的) 所以如果能在一開始就知道 數據連接到底 怎么實現,到底麻煩不麻煩.那么最起碼心里有個底,
換言之,我也可以安心的把軟件做的好點到時候將數據的那部分模塊換成從網絡上獲取就好了.
好了廢話不多說了直接進入正題.(PS:我這邊只是把我實現數據獲取的方式講一下,因為我自己也不是很深入的研究,所以數據獲取的模塊被我弄的非常簡單....還是那句話希望不要誤人子弟.)
正文:
數據獲取的話 我這邊使用的數據格式是JSON格式的數據 (不知道JSON的請自行百度)
在一開始實現的時候我是先寫個c# 的webservice服務的,然后發現通過我這個方法調用過來之后返回的數據是
XML格式的..這樣的話,為了獲得里面的數據我還需要再解析XML一遍.非常的麻煩(苦逼的程序員就是怕麻煩的人物啊...)
然后我這邊就分析了下數據獲取的實現原理...然后就將服務提供換成了 C# 網頁中的 一般處理程序 也就是.ashx文件
至於.ashx文件怎么寫 請在本文備注部分查看
http://XXXXX.XXXX.XXX/WebServicesForIOS/IOSWebservices.ashx ? 參數....
這個是我們.ashx的地址
{"Result":"True","Data":{"ID":196,"用戶名":"dl","密碼":"dl","姓名":"dl","角色":"dl","是否是管理員":"True"}}
這個是返回的數據
接下來就直接開始講OC部分的實現吧
首先大家需要新建一個類.然后繼承至NSObject類 就好了
命名的話我是叫 "GetWebInfo"
完成后XCODE會創建兩個文件 分別是GetWebInfo.h與GetWebInfo.m
首先打開 .h文件
改成這樣
#import <Foundation/Foundation.h> #define WEBADDRESS @"http://XXXXX.XXX.XXX/WebServicesForIOS/IOSWebservices.ashx" @interface GetWebInfo : NSObject{ NSString *parameters; } @property(nonatomic,retain) NSString *parameters; -(NSString *)dogetWebInfo; @end
我這邊定義了一個全局的 定量
WEBADDRESS
一個string類型的變量
parameters
一個返回string 的方法
-(NSString *)dogetWebInfo;
接下來我來分別講下這三個的作用
首先是定量 WEBADDRESS 該定量的作用就是配置地址.這樣的話 如果我需要訪問不同的地址的時候只要修改一下該文件就可以了.至於為什么要這么做呢?相信大家應該都是有很多測試地址和正式地址的..到時候只要修改一下前面的網頁鏈接就可以輕松搞定測試與正式的切換了
然后是parameters 就是參數了 .這邊的參數的話我是用很土的辦法 由大家自己拼接string然后傳遞
大致的格式就是 Method=方法名&參數1名=參數1&參數2名=參數2 這樣的拼接
這樣的話 我調用不同的方法 只需要傳遞 對應的方法名以及所需要的參數就可以了 然后他就會通過 dogetWebInfo來獲取數據了.
然后是-(NSString *)dogetWebInfo;
其實講了這么多 核心的就是dogetWebInfo方法了 請直接看.m文件
#import "GetWebInfo.h" @implementation GetWebInfo @synthesize parameters; -(NSString *)dogetWebInfo{ NSURL *url = [NSURL URLWithString:WEBADDRESS]; NSData *queram=[parameters dataUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; [urlRequest setHTTPMethod:@"POST"]; [urlRequest setHTTPBody:queram]; NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil]; NSString *string=[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; return string; } @end
我來細節的解釋下獲取數據的實現
我們這邊需要用的是 NSURL類 首先是定義Nsurl的地址
然后queram 呢就是我們的參數拉
urlRequest 就是返回類了
然后是定義 他是Post傳輸還是get傳輸再然后setHTTPBody的作用呢就是 設置參數.
result 呢就是返回的結果 這邊返回的結果呢是NSData類型的
所以最后呢 需要講result轉化為string類型..就可以獲得我們的數據了.
之后呢我們就可以對獲取過來是json格式的數據進行操作了
當然這邊他目前還是nsstring 格式的 我們還需要轉換成可以使用的格式..但是簡單來講我們已經完成了數據獲取的全部內容了
是不是非常簡單呢?嘿嘿就是這么簡單!
PS:這邊返回的數據 呢是 在網頁中打開是什么 獲取 獲取的就是什么.
大家都知道 如果我們直接在網頁中訪問webservice的時候他是包含xml 的內容的 實際的內容他會放在<string></string>節點當中
也就是這樣分析.所以我才改用.ashx的方法
備注部分:
這部分呢主要是講下.ASHX的簡單實現
新建完.ashx 文件的話 他回有個默認的方法
然后里面呢會有以個context 變量
我們就可以直接使用這個變量了
context.Request["變量名"] 這樣呢就是獲取變量
context.Response.Write("數據");//格式我是用string格式的這樣呢就是返回數據了
也很簡單.大家可以趕緊去試試吧.
全文就這么多內容了請期待下一篇..下一篇應該會講解下 如何處理獲取過來的nsstring格式的json數據