Non conosco quasi nulla di JSON e devo inviare una richiesta ad un server e leggere i dati che ci arrivano, usando solo l'iPhone.IPONE JSON: come inviare una richiesta JSON e prelevare i dati da un server?
Ho provato a utilizzare lo jason-framework per farlo, ma dopo aver letto le documentazioni non sono stato in grado di capire come costruire l'oggetto e inviarlo sulla richiesta. Così ho deciso di adattare un altro codice che ho visto qui su SO.
L'oggetto quello che serve è questo:
{ "codice": xxx}
Qui ho un problema. Questo xxx è un NSData, quindi ho il sospetto che devo convertire questi dati in una stringa, quindi utilizzare questa stringa per creare un oggetto e inviarlo sulla richiesta.
la risposta del server è anche un oggetto JSON, sotto forma
{ "risposta": "yyy"} dove yyy è un numero compreso tra 10000 e 99999
Questo è il codice che ho così lontano.
- (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];
}
tutto questo codice mi dà errori. O URL BAD o eccezione java.
Cosa c'è di sbagliato con questo codice?
Se voi ragazzi preferiscono dare un'altra soluzione utilizzando il JSON-quadro prego di dirmi come codificare l'oggetto utilizzando quella coppia ("codice", "il mio NSData qui convertito in stringa") ...
grazie per qualsiasi aiuto
Grazie !!!!!! questo è tutto!la documentazione della libreria ASIHTTPRequest è piuttosto incompleta e superficiale (non è colpa tua), ma sono riuscito a farlo funzionare seguendo le tue istruzioni. Perfezionare! Sei un uomo D! – SpaceDog
Felice che abbia funzionato per te. Non rinunciare a ASIHTTPRequest. È piuttosto semplice una volta capito. L'unica cosa è, non dimenticare di fornire i metodi setDidFinishSelector/setDidFailSelector e impostare il delegato in modo da essere avvisati quando la rete fallisce. Troppe zone morte cellulari là fuori. – Ramin