IOS學習十四:網路之ASIHttpRequest和SBJson簡單使用

來源:互聯網
上載者:User

現在的學習基本脫離了那幾本教程,

上個禮拜正式著手代碼編寫。

同事UI弄得比較快,於是我只好寫寫網路通訊,資料來源模型設計以及加解密。

這邊簡單的說下常用的第三方網路程式庫以及,以及json資料協議格式的簡單使用。

先引入目前網上點擊率最高的關於這個使用的文章(源文不詳,呵呵)

ASIHTTPRequest類庫簡介和使用說明

我只是簡單說下一般項目中會用到的最基礎一部分,有的東西都是用著用著就熟了,犯不著一開始記住那麼多,然後沒有實踐都會慢慢忘掉,

我比較喜歡先簡單看下,在頭腦中形成一個類似於一個索引目錄,不知道細節沒關係,我們有了索引就可以去查閱資料嘛。

先準備下ASIHttpRequest的一些下載和添加。

1.,我是在github上下的,地址https://github.com/pokeb/asi-http-request/

2.然後吧源檔案拖進去項目,添加:CFNetwork.framework,.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib。上面文章都有介紹。

然後我們簡單看下一個最簡單的非同步請求。

包含一個url地址,一個request,一個delegate。

@implementation NLNetHelper+ (void)startRequesWithContent:(NSObject *)model delegte :delegte{    //step 1: 根據code判斷是佛要3des加密    NSString *code = [model getMethidCode];    NSLog(@"code是!!!!!!%@",code);    if (code == @"10000") {            }        //step 2:head和body組裝成jsonString    NLHead *head = [[NLHead alloc] init];   // head       //  NSString *urlString = [NSString stringWithFormat:@"%@%@.do",baseURL,code];    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];    [request setPostBody:nil];    [request setDelegate:delegte];    [request startAsynchronous];        //step1. 模型解析}

代碼直接項目中測試類別拷貝的,主要看下面的4-5句。

因為在Android編寫習慣性會把我們自己的網路處理類封裝在一起。

但是ios中看了很多demo,發現請求參數處理以及request以及response返回的處理都在ViewController中處理~

一眼看上去是方便多了,不用定義一些類似於bean類型的類來管理我們要設定進去一些屬性值,用於最後轉化成請求參數在網路層處理,

而是很直接的手動拼裝起來。

因為這第一個項目,也不知道ios有木有這樣的習慣,就是ViewController類中基本處理了當前頁面的所有邏輯操作~因為看過一個我們外包版本的項目

一個ViewController代碼2,3千行~~

好了,我的意思是有需要的可以自己書寫一個netManager,parseHelper等等的類。

在Android中非同步操作一般子線程然後handler來處理。

ios暫時沒接觸多線程這塊。非同步請求,對於返回以及何時返回,返回錯誤,用了代理這方法。

因為我們都知道非同步這個概念,直白點就是,MainThread新起一個SubThread,子線程處理完東西後,一是用所謂的Handler神馬的機制來通知主線程,

或者是經典的的回呼函數嘛。而代理類,協議啊介面,正式有部分這樣的性質不是嗎?

@optional// These are the default delegate methods for request status// You can use different ones by setting didStartSelector / didFinishSelector / didFailSelector- (void)requestStarted:(ASIHTTPRequest *)request;- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;- (void)request:(ASIHTTPRequest *)request willRedirectToURL:(NSURL *)newURL;- (void)requestFinished:(ASIHTTPRequest *)request;- (void)requestFailed:(ASIHTTPRequest *)request;- (void)requestRedirected:(ASIHTTPRequest *)request;// When a delegate implements this method, it is expected to process all incoming data itself// This means that responseData / responseString / downloadDestinationPath etc are ignored// You can have the request call a different method by setting didReceiveDataSelector- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;// If a delegate implements one of these, it will be asked to supply credentials when none are available// The delegate can then either restart the request ([request retryUsingSuppliedCredentials]) once credentials have been set// or cancel it ([request cancelAuthentication])- (void)authenticationNeededForRequest:(ASIHTTPRequest *)request;- (void)proxyAuthenticationNeededForRequest:(ASIHTTPRequest *)request;

以上就是所有的可選的帶了方法,看意思就明白。

好了,以上只是ASIHttpRequest中部分的功能,基本就能解決我們一般網路類應用中大部分的功能了吧。

二:SBJson使用

雖然現在看到說sdk5.0以上,已經整合了json解析庫。同時貌似說效能還高,但是,可能我們的現在的應用還要相容下5.0以下的版本。

反正這些都是需要我們客觀看待然後主觀舍取。

SBJSon同樣的一個第三方包

1. https://github.com/stig/json-framework

我們都知道,json的格式就是key value。

說白了json格式就是一種帶著特性的String字竄。

我們把我們要的資料群組裝成這樣的字竄床底給服務端,然後服務端返回同樣這樣字竄的資料,我們要解析然後提取出內容來。

看過java我們都知道,其實裡面是map的遍曆。

同樣的,在ios,我們需要先定義一個字典,然後把需要傳遞的資料以索引值對存入,然後調用json解析器產生jsonString。

同樣,也會有個還原序列化咯。

[dictionary JSONRepresentation]; 字典產生jsonString。

 NSMutableDictionary *dic = [jsonString JSONValue]; jsonString轉化成字典

其實相對於ios上的,java中其實封裝的更加完美。能直接操作javabean-》jsonString。

因為用了反射,後來查了下,貌似ios也是有反射這內容啊~

為什麼說bean—>jsonString呢。

因為,大部分,比如我們一個使用者登陸通訊,我們會設計一個LoginBean,包含兩個欄位 username和password,然後是setter,getter方法。

當然,不用bean,直接在ViewCotroller中把name啊password設定如dic中,因為我看了幾個demo版本都這樣~,甚至我們外包的那個項目也是這麼搞。

好了,反正簡單來說。

資料轉化,如果使用了類似於bean的自訂類,那麼bean—》dic—>jsonString。反解析時同樣。

因此我的處理是:

-(NSString *)bean2jsonString{    NSMutableDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:             partnerCode, @"partnerCode",             version, @"version",             prov,@"prov",             mobile,@"moblie",             methodId,@"methodId",             userId,@"useId",             [NSDictionary dictionaryWithObjectsAndKeys:postTime, @"postTime",md5Sign,@"md5Sign",nil],@"other",            nil];    return [dictionary JSONRepresentation];}- (void)jsonString2Bean:(NSString *)jsonString{    NSMutableDictionary *dic = [jsonString JSONValue];    NSString *partnerCodeString = [NSString stringWithFormat:@"修改過的%@",[dic objectForKey:@"partnerCode"]];    [self setPartnerCode:partnerCodeString];    }

該方法是在bean中。反正覺得沒有Android中json用起來方便,你扔個標準bean對象,就給你出來一個jsonString。

其實也是很簡單的兩塊內容,剛做了,記錄下。下面準備調通下加密這塊,分享和借鑒

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.