无法使用 AFNetworking 发布带有数组的字典
Posted
技术标签:
【中文标题】无法使用 AFNetworking 发布带有数组的字典【英文标题】:Can't post dictionary with array with AFNetworking 【发布时间】:2014-12-16 15:42:51 【问题描述】:显然,服务器无法理解我的数组字典。 这是我写的
NSURL *url = [NSURL URLWithString:@"http://"];
self.manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
self.manager.requestSerializer = [AFJSONRequestSerializer serializer];
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[self.manager setResponseSerializer:responseSerializer];
self.manager.responseSerializer.acceptableContentTypes = [self.manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
[SOUser sharedManager].id, @"id",
@"vk", @"socialId",
[SOUser sharedManager].firstName, @"firstName",
[SOUser sharedManager].lastName, @"lastName",
[SOUser sharedManager].sex, @"gender",
[SOUser sharedManager].friends, @"friends", nil];
[self.manager POST:@"api/user/"
parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject)
//NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
NSLog(@"OPERATION = %@", operation);
NSLog(@"%@", operation.responseString);
NSLog(@"JSON: %@", responseObject);
NSLog(@"Token = %@", [responseObject objectForKey:@"token"]);
[SOUser sharedManager].legendaryToken = [responseObject objectForKey:@"token"];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
NSLog(@"message: %@", [operation.responseObject objectForKey:@"message"]);
NSLog(@"operation: %@", [operation.responseObject objectForKey:@"errors"]);
NSDictionary *ac = [operation.responseObject objectForKey:@"errors"];
NSLog(@"%@", [ac objectForKey:@"email"]);
NSString *fg = [ac objectForKey:@"email"];
NSLog(@"%@", fg);
];
[SOUser sharedManager].friends
是NSMutableArray
:
for (int i = 0; i < 25; i++)
[self.friends addObject:[NSString stringWithFormat:@"%i", i]];
在服务器上,我收到了所有数据,但不是我的数组,而是我的数字服务器打印字符串“数组”?它可以是什么?
我的 JSON:
JSON:
email = "<null>";
"fb_friends" = "<null>";
"fb_id" = "<null>";
firstName = Sergey;
gender = 2;
id = 17;
lastName = Oleynich;
phone = "<null>";
token = 6990b71a61411d9d038dad1e2a54dd9f;
"vk_friends" = (
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24
);
"vk_id" = 3;
服务器
JSON : Id:17
vk_id:3
fb_id:NULL
firstName:Sergey
lastName:Oleynich
gender:2
email:NULL
vk_friends:Array
【问题讨论】:
1.它是语义,但您描述为“JSON”的并不是真正的 JSON。这是您在 NSLog 将创建 JSON 的对象时得到的。 2. 您向我们展示了服务器收到的内容,但您现在没有向我们展示您生成了该输出。如果有的话,vk_friends
是Array
的事实令人鼓舞。我想知道问题是否在于您如何在服务器上检查/显示请求,而不是请求本身的问题。向我们展示您是如何生成最终“服务器”输出的。
@Rob 向我们展示您是如何生成最终“服务器”输出的。我不明白我应该展示什么?你的意思是我发送给服务器的到底是什么?我该如何展示它?
不,我的问题是您如何在原始问题的末尾输出最后一个输出块。如果我理解正确,您会问“为什么我的 'vk_friends' 键会看到 'Array'?”好吧,我们必须看看您是如何生成该输出的。您最初的问题意味着您认为问题出在原始请求中,我建议该请求可能没问题,但这可能只是您如何输出vk_friends
的问题,直到我无法回答您向我们展示了您是如何创建最终“服务器”输出的。
【参考方案1】:
我建议您的请求可能没问题,但问题可能只是您在问题末尾显示“服务器”值的方式。例如,如果您的服务器是用 php 编写的,而您的 echo
是保存 vk_friends
数组的变量,则它只会显示“Array”。
如果你想在 PHP 中显示数组,你可以这样做:
foreach ($vk_friends as $vk_friend)
echo $vk_friend . "\r\n";
坦率地说,如果您的服务器正在响应应用程序,那么您可能会使用json_encode
,无论如何,这一点没有实际意义。但这可能是您当前在输出中看到“Array”的原因。
【讨论】:
我做客户。服务器制造了另一个人,他们说在服务器上他们只看到阵列。这就是为什么我认为我的帖子可能不正确。请你给我建议如何在我的代码中使用 NSLog 查看我的原始输出信息(以 json 格式)。 您的客户端请求在我看来没问题,但真正的测试是在 Charles 之类的工具中观察请求,并查看在模拟器上运行应用程序时发送的 JSON。我打赌你会看到那里的朋友名单。如果是这样,请与您的服务器朋友分享 JSON,看看他们怎么说。但是,如果不是,请使用该 JSON 更新您的问题。问题是 JSON 是否有效,或者您和服务器团队之间是否存在一些无辜的误解。以上是关于无法使用 AFNetworking 发布带有数组的字典的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking + AFHTTPRequestOperation 无法保存数组
从 AFNetworking 2.0 加载带有 JSON 的 UITableView
iOS,AFNetworking - 带有 JSON 响应的“清除”NSSTring [关闭]