2011-10-12 4 views
0

Je développe un programme à l'aide de l'API GOogle Places et il a deux fonctions: searchPlaces et loadPlaceDetails.JSON n'est pas analysé

La fonction loadPlaceDetails utilise le même code que la fonction searchPlaces (adaptée) mais ne renvoie pas les données correctement.

Ci-dessous, est le code de la fonction loadPlaceDetails:

- (NSString *)loadPlaceDetails{ 

    NSString *myJson = [[NSString alloc] initWithContentsOfURL: 
          [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/details/json?reference=CnRlAAAATXOCsnqUpz9GCU61PDw2GokDo2DTa_EWsUIDsfx5Fz5SF42iSarv-xE-smvnA6cY_kWbYIFte07Cu-_RsFvLewld_onmhaDvj_lsStNhoDzi_sTpOVhZywIH_8Y5YkrkudefaMF0J9vzUt_LfMzL2xIQXkCcDhJBwamOWFtvAXoAQRoUjwnYvrXeuYy6-ALt1enT1kRfDO4&sensor=true&key=AIzaSyBLY-lBALViJ6ybrgtOqQGhsCDQtsdKsnc"]]; 

    if ([myJson length] == 0) { 
     [myJson release]; 
     return @"Error"; 
    } 

    // Create a dictionary from the JSON string 
    NSDictionary *results = [myJson JSONValue]; 

    NSArray *place = [results objectForKey:@"results"]; 

    placeDetailName = [[NSMutableString alloc] init]; 
    placeDetailAddress = [[NSString alloc] init]; 
    placeDetailLat = [[NSString alloc] init]; 
    placeDetailLng = [[NSString alloc] init]; 
    placeDetailUrl = [[NSString alloc] init]; 
    placeDetailPhone = [[NSString alloc] init]; 

    for (NSDictionary *element in place) 
    { 
     NSString *name = [element objectForKey:@"name"]; 
     [placeDetailName stringByAppendingFormat:@"%@",name]; 
     NSLog(@"Nome do estabelecimento: %@",placeDetailName); 

     NSString *address = [element objectForKey:@"formatted_address"]; 
     [placeDetailAddress stringByAppendingFormat:@"%@",address]; 
     NSLog(@"%@",address); 

     NSString *phone = [element objectForKey:@"formatted_phone_number"]; 
     [placeDetailPhone stringByAppendingFormat:@"%@",phone]; 
     NSLog(@"%@",phone); 

     NSString *url = [element objectForKey:@"url"]; 
     [placeDetailUrl stringByAppendingFormat:@"%@",url]; 
     NSLog(@"%@",url); 
    } 

    for (NSDictionary *result in [results objectForKey:@"results"]) 
    { 
     NSDictionary *location = [[result objectForKey:@"geometry"] objectForKey:@"location"]; 
     NSString *latitude = [[location objectForKey:@"lat"] stringValue]; 
     NSString *longitude = [[location objectForKey:@"lng"] stringValue]; 
     [placeDetailLat stringByAppendingFormat:@"%@",latitude]; 
     [placeDetailLng stringByAppendingFormat:@"%@",longitude]; 
    } 

    NSString *basicurl = @"http://www.(...)/(...)/directions.html"; 
    NSString *funcao = @"loaddetailplace"; 
    NSMutableString *placesURL = [NSMutableString string]; 

    [placesURL appendString:[NSString stringWithFormat:@"%@?function=",basicurl]]; 
    [placesURL appendString:[NSString stringWithFormat:@"%@&latorigem=",funcao]]; 
    [placesURL appendString:[NSString stringWithFormat:@"%@&lngorigem=",placeDetailLat]]; 
    [placesURL appendString:[NSString stringWithFormat:@"%@",placeDetailLng]]; 

    return placesURL; 

} 

Quand je l'appelle quelque part dans le programme (même classe), il retourne http://www.(...)/(...)/directions.html?function=loaddetailplace&latorigem=&lngorigem=.

Il ne traite pas les autres parties de la fonction. Je ne sais pas ce qui se passe et serais reconnaissant si quelqu'un m'a aidé!

Merci!

Répondre

1

La fonction ne correspond pas au JSON renvoyé.

Dans votre fonction, vous avez, par exemple:

NSArray *place = [results objectForKey:@"results"]; 

Alors que le premier niveau du tableau retourné contient quelque chose comme:

"result": { 
    "address_components": [], 
    "formatted_address": "CRS 504 Bl B s/n lj 61 - Brasília - DF, 70331-525, Brasil", 
    "formatted_phone_number": "(61) 3224-0625", 
    "geometry": {}, 
    "icon": "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png", 
    "id": "6c85c1faf37814d6d6ca8bea9576cbb49eece4f5", 
    "international_phone_number": "+55 61 3224-0625", 
    "name": "Banco Itaú S/A", 
    "reference": "CnRlAAAA73YR15TKnyhpZQrt7Cgi6QfWkgtZD5jXemeoAIjeoS52LwfkxcjikEJZu0gkmg0519e9NWh5fuuGjzgN_B1qO1e7RuaI1ZgbpB5eXpflLWS1jJXUfjDfIflVyn017XXI56KQf0Qxd15WSiXFXDQu9xIQQ2M0WexDH9WwBgw0IvPCXxoUihDOTi3Qrx8RNRhmVJgivqnoxng", 
    "types": [], 
    "url": "http://maps.google.com/maps/place?cid=944480254308386018", 
    "vicinity": "CRS 504 Bl B s/n lj 61 - Brasília" 
} 

Au premier niveau, vous avez un NSDictionary ('résultat' (pas de résultats). Je suggère de revoir le format JSON retourné par l'URL que vous utilisez.