【问题标题】:JSON answer to check if a server is reachable用于检查服务器是否可访问的 JSON 答案
【发布时间】:2012-11-01 19:33:28
【问题描述】:

我有一个刚刚打开的应用程序调用了一个网络服务器页面,它给了我一个 json 字符串。 当我在本地网络上时,一切正常,但是当我在本地网络之外打开应用程序并且没有 vpn 时,应用程序崩溃。 如何控制 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 完全没有经验,但我敢打赌,发生错误时结果将无法使用。

标签: iphone ios json reachability


【解决方案1】:

除其他外,您未能:

  • 检查从远程 URL 获取 ASCII 编码字符串的尝试是否失败(明显的可能性:URL 不可访问,结果是 UTF-8 而不是 ASCII);
  • 检查JSON解析是否成功(明显的可能:服务器404d,而是返回了HTML错误页面)
  • 检查返回的 JSON 对象是否实际上是一个字典(例如,它可能是一个数组,在这种情况下调用 objectForKey: 会引发异常)

将返回数据解析为 ASCII 然后重新编码为 UTF-8 也可能是多余的 - 因为一个超集另一个它具有阈值测试的效果,否则会阻止可接受的结果继续进行。

【讨论】:

    【解决方案2】:

    这段代码有用过吗?

    1. 您应该在[NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; 之后检查error
    2. 您正在将 URL 数据读入 urlString,然后从未初始化的 newStr 获取 NSData 并解析它?
    3. 再次强调,无论何时提供error,您都应该先检查它,然后再进行其他操作
    4. 为什么将数据读取为 ASCII 而将 NSData 读取为 UTF8?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      相关资源
      最近更新 更多