2012-01-26 6 views
0

Je fais une application Android qui doit rechercher dans ma région locale dans les 10 km et afficher les résultats sur une carte en utilisant des broches, par exemple: "Starbucks", "Wallmart", centre commercial, etc. Le mot de recherche que je spécifie dans ma classe d'activité. Et pour être clair: je ne veux pas ouvrir la recherche dans Google Maps, je veux qu'il affiche les résultats dans ma propre application. Mais j'obtiens une erreur sur le code qui exécute la recherche. L'erreur se produit dans les choses suivantes:API Google Places - android

Url: url ne peut pas être résolu ou non un champ Exécuter: La méthode d'exécution() est définie pour le type HttpRequest Réponse: La réponse ne peut être résolu ou non un champ

J'utilise trois paquets: com.mycompany.applicationname = package par défaut, contenant du code principal, y compris le code de recherche com.mycompany.applicationname.Model = contenant PlaceAutoComplete, PlacesList, place, etc. com.mycompany .applicationname.PlacesRequests = Contenant PlaceRequest.java

S'il vous plaît aidez-moi, je l'ai vraiment besoin d'aide et merci beaucoup à l'avance

Voici le code que j'utilise pour exécuter la recherche:

 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; 
     } 
} 

Répondre

0

En ce qui concerne l'interface HTTP passe, votre code LGTM supposant que API_KEY contient une clé API valide. C'est-à-dire, créé dans la console API. Essayez d'imprimer l'ensemble request.url et voir si elle ressemble à ceci:

https://maps.googleapis.com/maps/api/place/search/json?key=AIzaSyDoTeTuPXXXXXXXXXMHPVYM5VTg&location=37.994682,-87.6045923&radius=500&sensor=false

Voir aussi this thread parce e.response n'est pas valide, peut-être simplement supprimer cet appel à println et voir ce que e ressemble quand il est jeté.

0

Vous pouvez le faire en utilisant Google API JAVA Client - Voici un exemple utilisant le client java pour obtenir tous les 60 résultats.

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; 
     } 

    }