我正在使用GOogle Places API开发一个程序,它有两个功能:searchPlaces和loadPlaceDetails。
函数loadPlaceDetails使用的是searchPlaces函数(改编)的相同代码,但它没有正确返回数据。
下面是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;
}
当我在程序中的某个地方(同一个类)调用它时,它会返回http://www.(...)/(...)/directions.html?function=loaddetailplace&latorigem=&lngorigem=。
它不处理函数的其他部分。我不知道会发生什么,如果有人帮助我,我将不胜感激!
谢谢!
答案 0 :(得分:1)
该函数与返回的JSON不匹配。
在你的功能中,你有,例如:
NSArray *place = [results objectForKey:@"results"];
虽然返回数组的第一级包含如下内容:
"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"
}
在第一级,你有一个NSDictionary(不是NSArray)'结果'(不是结果)。我建议您查看您正在使用的URL返回的JSON格式。