iOS:消息=“发生了错误。”在JSON POST中

时间:2013-11-06 04:57:37

标签: ios json

在java中工作,而不是在目标c中工作。进入“Json Data Posted”状态后,数据不会保存在数据库中。 我应该以如下所示的格式发送数据以获得json响应

{
                "ProjID": "78",
                "Uid": "12",
                "EmailID": "ratnam_nv@yahoo.com",
                "ProjectInviterFQAnswers": [{
                    "slno": "1",
                    "Answer": "a1",
                    "order": "1",
                    "flag": "F"
                }, {
                    "slno": "2",
                    "Answer": "a1",
                    "order": "2",
                    "flag": "F"
                }, {
                    "slno": "1",
                    "Answer": "a1",
                    "order": "2",
                    "flag": "Q"
                }
                ]
            };

我发送的日志字典的格式如下所示。

enter image description here

上述代码与我的日志截图之间的差异是';'在每个键值对之后,我得到了标题中提到的响应。

有任何纠正代码/逻辑的建议吗?这就是我编码的内容。

 NSError *error = Nil;
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    NSDictionary *dictionaryArray1 = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"slno", @"a1", @"Answer", @"1", @"order", @"F", @"Flag", nil];

    NSDictionary *dictionaryArray2 = [NSDictionary dictionaryWithObjectsAndKeys:@"2", @"slno", @"a1", @"Answer", @"1", @"order", @"F", @"Flag", nil];

    NSDictionary *dictionaryArray3 = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"slno", @"a1", @"Answer", @"2", @"order", @"Q", @"Flag", nil];

    NSArray *arrayAnswer = [NSArray arrayWithObjects:dictionaryArray1, dictionaryArray2, dictionaryArray3, nil];

    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"78", @"ProjID", @"12", @"UID", @"ratnam_nv@yahoo.com", @"EmailID", arrayAnswer, @"ProjectInviterFQAnswer", nil];

    NSLog(@"Dictionary that is being sent to URL is = %@", dictionary);

    NSURL *url = [NSURL URLWithString:@"http://cnapi.iconnectgroup.com/api/QRCodeScan/SaveAnswers"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

    NSData *requestData = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&error];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];

    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection start];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
        if(error || !data)
        {
            NSLog(@"JSON Data not posted!");
            [activity stopAnimating];
            UIAlertView *alertMessage = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Data not saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alertMessage show];
        }
        else
        {
            [activity startAnimating];
            NSLog(@"JSON data posted! :)");
            NSError *error = Nil;
            NSJSONSerialization *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

            NSLog(@"Response is %@", jsonObject);
            [activity stopAnimating];
        }

    }];
}

2 个答案:

答案 0 :(得分:1)

所以这就是我如何解决自己的问题。

 NSString *str = @"{\"ProjID\": \"78\",\"Uid\": \"12\",\"EmailID\": \"ratnam_nv@yahoo.com\",";
    str = [str stringByAppendingString:@"\"ProjectInviterFQAnswers\": ["];
    str = [str stringByAppendingString:@"{\"slno\": \"1\",\"Answer\": \"a1\",\"order\": \"1\", \"flag\": \"F\"},"];
    str = [str stringByAppendingString:@"{\"slno\": \"2\",\"Answer\": \"a1\",\"order\": \"1\",\"flag\": \"F\"},"];
    str = [str stringByAppendingString:@"{\"slno\": \"1\",\"Answer\": \"a1\",\"order\": \"2\",\"flag\": \"Q\"}"];
    str = [str stringByAppendingString:@"]}"];
    NSLog(@"String is === %@", str);

 NSURL *url = [NSURL URLWithString:@"http://cnapi.iconnectgroup.com/api/QRCodeScan/SaveAnswers/"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

NSData *requestData = [str dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection start];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
        if(error || !data)
        {
            NSLog(@"JSON Data not posted!");
            [activity stopAnimating];
            UIAlertView *alertMessage = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Data not saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alertMessage show];
        }
        else
        {
            [activity startAnimating];
            NSLog(@"JSON data posted! :)");
            NSError *error = Nil;
            NSJSONSerialization *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
            NSLog(@"Response is %@", jsonObject);
        }
    }];

答案 1 :(得分:0)

在我的情况下,我得到了同样的错误,问题是我将错误的数据发送到服务。基本上,错误是由使用以下行设置错误的正文引起的:

[request setHTTPBody: requestData];

之间,在iOS9中不推荐使用sendSynchronousRequest。使用

...
NSURLSessionDataTask * dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request
                            completionHandler:^(NSData *data,
                                    NSURLResponse *response,
                                    NSError *error) {
if(error || !data)
    {
        NSLog(@"JSON Data not posted!");
        [activity stopAnimating];
        UIAlertView *alertMessage = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Data not saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertMessage show];
    }
    else
    {
        [activity startAnimating];
        NSLog(@"JSON data posted! :)");
        NSError *error = Nil;
        NSJSONSerialization *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

        NSLog(@"Response is %@", jsonObject);
        [activity stopAnimating];
    }
}] resume];