placeautocompletefragment - API de Google Places-Android
how to use place picker in android (2)
Estoy haciendo una aplicación para Android que necesita buscar en mi área local dentro de los 10km y mostrar los resultados en un mapa usando pines, por ejemplo: "Starbucks", "Wallmart", centro comercial, etc. La palabra de búsqueda que especifico en mi clase de actividad Y para ser claro: NO quiero abrir la búsqueda en los mapas de Google, quiero que muestre los resultados dentro de MI propia aplicación. Pero recibo un error en el código que ejecuta la búsqueda. El error aparece en las siguientes cosas:
Url: url no se puede resolver o no es un campo Ejecutar: El método execute () no está definido para el tipo HttpRequest Response: la respuesta no se puede resolver o no es un campo
Estoy usando tres paquetes: com.mycompany.applicationname = Paquete predeterminado, que contiene el código principal, incluido el código de búsqueda com.mycompany.applicationname.Model = Contiene PlaceAutoComplete, PlacesList, Place, etc. com.mycompany.applicationname.PlacesRequests = Contiene PlaceRequest .Java
Por favor, ayúdenme, realmente necesito ayuda y muchas gracias de antemano
Este es el código que estoy usando para ejecutar la búsqueda:
private static final String PLACES_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/search/json?";
private static final boolean PRINT_AS_STRING = false;
public void performSearch() throws Exception {
try {
System.out.println("Perform Search ....");
System.out.println("-------------------");
HttpRequestFactory httpRequestFactory = createRequestFactory(transport);
HttpRequest request = httpRequestFactory.buildGetRequest(new GenericUrl(PLACES_SEARCH_URL));
request.url.put("key", API_KEY);
request.url.put("location", lat + "," + lng);
request.url.put("radius", 500);
request.url.put("sensor", "false");
if (PRINT_AS_STRING) {
System.out.println(request.execute().parseAsString());
} else {
PlacesList places = request.execute().parseAs(PlacesList.class);
System.out.println("STATUS = " + places.status);
for (Place place : places.results) {
System.out.println(place);
}
}
} catch (HttpResponseException e) {
System.err.println(e.response.parseAsString());
throw e;
}
}
Puede hacer esto usando Google API JAVA Client - Aquí hay un ejemplo usando el cliente java para obtener los 60 resultados.
public PlacesList search(double latitude, double longitude, double radius, String types)
throws Exception {
try {
HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
HttpRequest request = httpRequestFactory
.buildGetRequest(new GenericUrl("https://maps.googleapis.com/maps/api/place/search/json?"));
request.getUrl().put("key", YOUR_API_KEY);
request.getUrl().put("location", latitude + "," + longitude);
request.getUrl().put("radius", radius);
request.getUrl().put("sensor", "false");
request.getUrl().put("types", types);
PlacesList list = request.execute().parseAs(PlacesList.class);
if(list.next_page_token!=null || list.next_page_token!=""){
Thread.sleep(4000);
/*Since the token can be used after a short time it has been generated*/
request.getUrl().put("pagetoken",list.next_page_token);
PlacesList temp = request.execute().parseAs(PlacesList.class);
list.results.addAll(temp.results);
if(temp.next_page_token!=null||temp.next_page_token!=""){
Thread.sleep(4000);
request.getUrl().put("pagetoken",temp.next_page_token);
PlacesList tempList = request.execute().parseAs(PlacesList.class);
list.results.addAll(tempList.results);
}
}
return list;
} catch (HttpResponseException e) {
return null;
}
}
En lo que respecta a la interfaz HTTP, su código LGTM suponiendo API_KEY
contiene una clave API válida. Es decir, uno creado en la consola API. Intenta imprimir toda request.url
y ver si se ve así:
También vea este hilo porque e.response
no es válido, tal vez simplemente elimine esa llamada para println
y vea cómo se ve e
cuando se lanza.