我在我的java web服務器和iOS應用程序之間來回發送數據。當我發送單個請求時,它工作正常。然而,當我從iPhone發送10個請求(我的UITableView中的每個單元需要唯一信息)時,請求無法正常工作。讓我來解釋一下發生了什麼:iPhone應用程序和後端通信
我的iOS應用程序正在用服務器返回的數據創建一個NSData對象。我正在使用[NSJSONSerialization JSONObjectWithData]
方法將其轉換爲NSDictionary。我收到一個錯誤,指出最後有垃圾數據。當我檢查緩衝區時,我看到我的第一個JSON字符串進來了,但是還附加了下一個JSON字符串。
如何解決我的服務器在一個字符串中發回請求的問題(因爲它處理得太快)。
我正在使用Apple的NSStream類來處理通信。
的代碼在一個位 -
`(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent:`
case NSStreamEventHasBytesAvailable:
{
//can read input
if (theStream == inputStream) {
if (inputStream.hasBytesAvailable) {
uint8_t buf[4096];
unsigned int len = 0;
len = [inputStream read:buf maxLength:4096];
if(len > 0 && len < 4096) {
NSError *error;
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[NSData dataWithBytes:buf length:len] options:NSJSONReadingAllowFragments error:&error];
if (error) {
當我檢查錯誤它說,在垃圾末端。我收到一個錯誤,當請求如下所示:
{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abbott, Philip C","overall":2,"reviews":21}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abel, Gavin Paul","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abel, Steven Richard","overall":5,"reviews":1}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abney, Scott A","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abraham, Dulcy M","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abraham, John ","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abramova, Inna ","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abu-Omar, Mahdi M","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Acharya, Lalatendu ","overall":0,"reviews":0}]}{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Acosta, Glen G","overall":0,"reviews":0}]}
,而不是單一的請求是這樣的:
{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abbott, Philip C","overall":2,"reviews":21}]}
{"command":"PROFESSOR_RATING","error":false,"data":[{"professor":"Abel, Gavin Paul","overall":0,"reviews":0}]}
..和等等
如何分割這件事到每個JSON字符串?我有什麼選擇?我需要改變我的服務器發送數據的方式嗎?
服務器:
String request = commands[1];
String results = submitReview(request);
bw.write(results);
bw.flush();
我已經手動試圖通過它解析,但遇到問題時,我有一個完整的請求(有效的JSON字符串),由長JSON字符串(這是不正確的,因爲附加它不適合緩衝區,其餘的將在下一個inputStream事件中發送))。有沒有人有什麼建議?
非常感謝。
-Kamran
你如何下載數據?你有沒有試過使用像AFNetworking這樣的圖書館? – Antzi
我剛剛編輯了這篇文章,因爲我不小心將其遺漏了。我正在使用NSStream與我的服務器通信。 – kamran619