我在我的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