Znam prawie nic o JSON i potrzebuję wysłać zapytanie do serwera i odczytać dane z niego pochodzące, używając tylko iPhone'a.JSON IPHONE: Jak wysłać żądanie JSON i pobrać dane z serwera?
Próbowałem użyć do tego celu jason-framework , ale po przeczytaniu dokumentacji nie byłem w stanie dowiedzieć się, jak skonstruować obiekt i wysłać go na żądanie. Postanowiłem więc zaadaptować inny kod, który widziałem tutaj na SO.
Przedmiot muszę to:
{ "code": xxx}
Tu mam problem. Ten xxx jest NSData, więc podejrzewam, że muszę przekonwertować te dane na ciąg, a następnie użyć tego ciągu do zbudowania obiektu i wysłać go na żądanie.
odpowiedź serwera jest również obiekt JSON w formie
{ „odpowiedź”: „yyy”} gdzie yyy to liczba pomiędzy 10000 a 99999
jest to kod mam tak daleko.
- (NSString *)checkData:(NSData) theData {
NSString *jsonObjectString = [self encode:(uint8_t *)theData length:theData.length];
NSString *completeString = [NSString stringWithFormat:@"http://www.server.com/check?myData=%@", jsonObjectString];
NSURL *urlForValidation = [NSURL URLWithString:completeString];
NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];
[validationRequest setHTTPMethod:@"POST"];
NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];
[validationRequest release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
NSInteger response = [responseString integerValue];
NSLog(@"%@", responseString);
[responseString release];
return responseString;
}
- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=";
NSMutableData *data = [NSMutableData dataWithLength:((length + 2)/3) * 4];
uint8_t *output = (uint8_t *)data.mutableBytes;
for (NSInteger i = 0; i < length; i += 3) {
NSInteger value = 0;
for (NSInteger j = i; j < (i + 3); j++) {
value <<= 8;
if (j < length) {
value |= (0xFF & input[j]);
}
}
NSInteger index = (i/3) * 4;
output[index + 0] = table[(value >> 18) & 0x3F];
output[index + 1] = table[(value >> 12) & 0x3F];
output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';
output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';
}
ret
urn [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}
cały ten kod daje mi błędy. Lub BAD URL lub wyjątek Java.
Co jest nie tak z tym kodem?
Jeśli faceci wolą dać inne rozwiązanie za pomocą JSON-ram proszę mi powiedzieć jak zakodować obiektu przy użyciu tej pary („Kod”, „moja NSData tutaj zamienione na ciąg”) ...
dzięki za każdą pomoc.
Thanks !!!!!! to jest to!Dokumentacja biblioteki ASIHTTPRequest jest dość niekompletna i powierzchowna (nie twoja wina), ale udało mi się ją wykonać przy użyciu twoich instrukcji. Idealny! Jesteś D człowiekiem! – SpaceDog
Cieszę się, że to zadziałało. Nie poddawaj się ASIHTTPRequest. Po opanowaniu jest to dość proste. Jedyną rzeczą jest, nie zapomnij podać metody setDidFinishSelector/setDidFailSelector i ustawić delegata, aby otrzymywać powiadomienia, gdy sieć nie powiedzie się. Zbyt wiele stref martwych komórek. – Ramin