用于检查服务器是不是可访问的 JSON 答案
Posted
技术标签:
【中文标题】用于检查服务器是不是可访问的 JSON 答案【英文标题】:JSON answer to check if a server is reachable用于检查服务器是否可访问的 JSON 答案 【发布时间】:2012-11-01 19:33:28 【问题描述】:我有一个刚刚打开的应用程序调用了一个网络服务器页面,它给了我一个 json 字符串。 当我在本地网络上时,一切正常,但是当我在本地网络之外打开应用程序并且没有 *** 时,应用程序崩溃。 如何控制 json 字符串? 这是我的代码:
NSString *urlstr = [[NSString alloc] initWithFormat:@"%@yes.php", av];
NSURL *url = [[NSURL alloc] initWithString:urlstr];
NSError* error = nil;
NSString* urlString = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
NSString *newStr;
NSData* data=[newStr dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
sn1 = [[json objectForKey:@"Rele1"] intValue];
我想将 json 答案与 NULL 值进行比较,如果两个参数相等,我会显示警报。
编辑:如果我尝试读取任何值,应用程序会在等待 json 回复时崩溃... 我已经绕过了带有 timeoutInterval 参数的 NSURLRequest 问题,该参数会在 n 秒后关闭连接。
【问题讨论】:
您有一个error:&error
参数,但您在调用后从不检查它。我对您使用的 API 完全没有经验,但我敢打赌,发生错误时结果将无法使用。
【参考方案1】:
除其他外,您未能:
检查从远程 URL 获取 ASCII 编码字符串的尝试是否失败(明显的可能性:URL 不可访问,结果是 UTF-8 而不是 ASCII); 检查JSON解析是否成功(明显的可能:服务器404d,而是返回了html错误页面) 检查返回的 JSON 对象是否实际上是一个字典(例如,它可能是一个数组,在这种情况下调用objectForKey:
会引发异常)
将返回数据解析为 ASCII 然后重新编码为 UTF-8 也可能是多余的 - 因为一个超集另一个它具有阈值测试的效果,否则会阻止可接受的结果继续进行。
【讨论】:
【参考方案2】:这段代码有用过吗?
-
您应该在
[NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
之后检查error
您正在将 URL 数据读入 urlString
,然后从未初始化的 newStr
获取 NSData 并解析它?
再次强调,无论何时提供error
,您都应该先检查它,然后再进行其他操作
为什么将数据读取为 ASCII 而将 NSData 读取为 UTF8?
【讨论】:
以上是关于用于检查服务器是不是可访问的 JSON 答案的主要内容,如果未能解决你的问题,请参考以下文章