Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用AFNetworking 2.0访问DailyMile API_Ios_Afnetworking_Getjson_Afnetworking 2 - Fatal编程技术网

Ios 使用AFNetworking 2.0访问DailyMile API

Ios 使用AFNetworking 2.0访问DailyMile API,ios,afnetworking,getjson,afnetworking-2,Ios,Afnetworking,Getjson,Afnetworking 2,因此,我从https站点发出一个JSON请求(在检索到auth令牌之后),与AFNetworking on stack overflow的十几个其他问题一样,我得到了以下错误: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to

因此,我从https站点发出一个JSON请求(在检索到auth令牌之后),与AFNetworking on stack overflow的十几个其他问题一样,我得到了以下错误:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) 

UserInfo=0x8dc2860 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
我用于发出此请求的代码如下所示:

AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

//Set auth header...
NSString *accessToken = [[[self.dailymileAuthentication oauthClient] accessToken] accessToken];
[requestSerializer setAuthorizationHeaderFieldWithToken:accessToken];

AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];

[requestManager setRequestSerializer:requestSerializer];
[requestManager setResponseSerializer:[AFJSONResponseSerializer serializer]];

[requestManager GET:[profileURL description]
         parameters:nil
            success:^(AFHTTPRequestOperation *operation, id response) {
                NSLog(@"JSON: %@", response);
            }
            failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                NSLog(@"Error: %@", error);
            }];
网址是:

如果有人对检查完整的代码库感兴趣,我正在使用公共GitHub repo(注意:您不需要了解问题,这只是可选的):

我需要做什么才能发出经过身份验证的JSON请求


我不知道我是否正确使用了AFNetworking。老实说,关于AFNetworking 2的文档还不多。

我不确定混淆的是什么;错误很明显:


Error Domain=NSCOCAERRORDOMAIN Code=3840“操作无法完成。(Cocoa错误3840)。“(JSON文本未以数组或对象开头,允许未设置片段的选项。)UserInfo=0x8dc2860{NSDebugDescription=JSON文本未以数组或对象开头,允许未设置片段的选项。}

DailyMile的JSON响应无效,因为它没有数组或对象作为其根值

如果该值确实是JSON,并且应该被解析为JSON,那么可以允许使用片段


但是,我怀疑您的API端点实际上并没有返回JSON,而是返回一个带有错误
内容类型
头的纯文本响应。

在请求或响应序列化中,错误发生在哪里?请注意:也许您会发现较低级别的API更适合(我也是)。这些超级方便的网络请求方法只会迫使您检查每一点源代码,以了解到底发生了什么。当我在浏览器中访问时,正在为我返回404。@moby您必须登录到dailymile.com,然后访问该API URL将为您提供JSON格式的配置文件。@CouchDeveloper错误发生在失败块中。我同意,我想我甚至不再需要网络了。NSURLSession已经取代了iOS中的许多缺点,我从未使用过它,但我在这里查看了一下:我很惊讶你们对AFNetworking 2.0缺乏文档的评论。你没有看到吗?你是对的,它没有返回JSON,但这不是混乱。它正确地返回带有错误消息的HTML正文,因为它将其解释为未经验证的请求。困惑在于如何发出经过身份验证的请求。如何在需要访问令牌时发出GET请求……这更多地与DailyMile API有关,而不是与AFNetworking有关。快速浏览一下就会发现他们错误地实现了OAuth。他们期望的不是头,而是
oauth\u令牌
参数,例如
https://api.dailymile.com/people/me.json?oauth_token=
Errr-wow。这就是为什么我不应该打网络电话。或许这就是为什么我应该在网络方面做得更多:-谢谢!现在可以用访问令牌作为参数了。我自己也在处理类似的问题。发生的情况是,程序员错误或对如何在前端使用AFNetworking的误解导致在后端返回错误。有一段时间,你试图找出背后的错误,却没有意识到真正的问题在前面。嘿,Travis(或其他人),如果你的问题也与Dailymile API使用AFNetworking有关,那么我正在使用的库现在可用了: