Iphone Http запрос ответа с помощью JSON - PullRequest
7 голосов
/ 22 марта 2011

Я пытаюсь отправить данные на сервер и получить ответ.Данные достигают сервера, но я не получаю никакого ответа.Значение данных ответа - ноль bcd, из которых выдается исключение,

-JSONValue failed. Error trace is: (
"Error Domain=org.brautaset.JSON.ErrorDomain Code=11 \"Unexpected end of string\" UserInfo=0x4e2dd70 {NSLocalizedDescription=Unexpected end of string}"

Может кто-нибудь, пожалуйста, помогите мне ....

Мой код:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.0.83:8082/WebServiceProject/AcessWebservice?operation=login"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSError *theError = NULL;
NSArray *keys = [NSArray arrayWithObjects:@"UserId", @"Password", nil];
NSArray *objects = [NSArray arrayWithObjects:@"rajin.sasi", @"abhi1551", nil];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];


NSString* jsonString = [jsonDictionary JSONRepresentation];

SBJSON *jsonParser = [SBJSON new];
[jsonParser objectWithString:jsonString];

NSLog(@"Val of json parse obj is %@",jsonString);   
[request setHTTPMethod:@"POST"];

[request setValue:jsonString forHTTPHeaderField:@"json"];
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&theError];      
[request setHTTPBody:responseData];

NSMutableString* stringData= [[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];
NSDictionary    *jsonDictionaryResponse = [stringData JSONValue];

NSString *json_message=[jsonDictionaryResponse objectForKey:@"message"];

printf("Json string is %s **********",[json_message UTF8String]);

Ответы [ 3 ]

12 голосов
/ 22 марта 2011

Я не знаком с подробностями вашего веб-сервиса, но приведенный ниже код может быть источником вашей проблемы (или хотя бы одного из них!)

[request setValue:jsonString forHTTPHeaderField:@"json"];
responseData = [NSURLConnection sendSynchronousRequest:request     returningResponse:&theResponse error:&theError];      
[request setHTTPBody:responseData];

Вы отправляете запрос раньшеустановка тела, которое, как я полагаю, должно включать ваше jsonString содержимое.Кроме того, вы присваиваете jsonString полю заголовка, вы уверены, что это то, что вы хотите?Вот предположение о том, что может сработать:

[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setHTTPBody:jsonString];
responseData = // rest of your code here....

Я предлагаю вам хорошо просмотреть этот код, так как на данный момент это беспорядок!У вас есть два NSURLConnection запроса, один asynchronous и один synchronous, довольно сложно понять, что / почему вы все это делаете, поэтому проверьте документацию Apple для NSURLConnection и приведите в порядокВаш код ...

[РЕДАКТИРОВАТЬ]

Вот мое предложение для вас:

NSError *theError = nil;
NSArray *keys = [NSArray arrayWithObjects:@"UserId", @"Password", nil];
NSArray *objects = [NSArray arrayWithObjects:@"rajin.sasi", @"abhi1551", nil];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSString *jsonString = [jsonDictionary JSONRepresentation];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.0.83:8082/WebServiceProject/AcessWebservice?operation=login"]];
[request setValue:jsonString forHTTPHeaderField:@"json"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData];
NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&theError];      
NSMutableString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *jsonDictionaryResponse = [string JSONValue];
[string release];
[theResponse release];
2 голосов
/ 23 мая 2015
    NSData* responseData = nil;

    NSURL *url=[NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    responseData = [NSMutableData data] ;

    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    NSString *bodydata=[NSString stringWithFormat:@"%@",jsonString];

    NSData *req=[NSData dataWithBytes:[bodydata UTF8String] length:[bodydata length]];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:req];
    [request setTimeoutInterval:15.0];

    NSURLResponse* response;
    NSError* error = nil;

    responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    NSError *dataError;

    NSMutableDictionary * jsonDict = [[NSMutableDictionary alloc]init];

    if (responseData != nil)
    {
        jsonDict = [NSJSONSerialization JSONObjectWithData:responseData
                                                   options:kNilOptions
                                                     error:&dataError];
           NSLog(@"jsonDict:%@",jsonDict);

    }
0 голосов
/ 05 сентября 2011

Попробуйте это:

[request setValue:jsonString forHTTPHeaderField:@"json"];
responseData = [NSURLConnection sendSynchronousRequest:request     returningResponse:&theResponse error:&theError];      
[request setHTTPBody:responseData];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...