2016-07-19 19 views
0

Ich verwendete diese tutorial, um Adresse in Autocompletetextview als Vorschläge zu erhalten. Ich habe Google Places API aktiviert und Android Key generiert. Aber wenn ich die App starte, bekomme ich diesen Fehler This IP, site or mobile application is not authorized to use this API key. Request received from IP address <IP>, with empty referer. Ist da etwas, was ich falsch mache? Wenn mir jemand in dieser Hinsicht helfen kann, wäre es großartig. Vielen Dank.Google platziert API-Autorisierungsfehler

I got this error as link in logcat

credentials

public class MainActivity extends Activity implements AdapterView.OnItemClickListener { 
 

 
    private static final String LOG_TAG = "ExampleApp"; 
 

 
    private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place"; 
 
    private static final String TYPE_AUTOCOMPLETE = "/autocomplete"; 
 
    private static final String OUT_JSON = "/json"; 
 

 
    //------------ make your specific key ------------ 
 
    private static final String API_KEY = "<GooglePlaceAndroidKey as in credentials>"; 
 

 
    @Override 
 
    public void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     AutoCompleteTextView autoCompView = (AutoCompleteTextView) findViewById(R.id.query); 
 

 
     autoCompView.setAdapter(new GooglePlacesAutocompleteAdapter(this, R.layout.list_item)); 
 
     autoCompView.setOnItemClickListener(this); 
 
    } 
 

 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
 
     String str = (String) adapterView.getItemAtPosition(position); 
 
     Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); 
 
    } 
 

 
    public static ArrayList<String> autocomplete(String input) { 
 
     ArrayList<String> resultList = null; 
 

 
     HttpURLConnection conn = null; 
 
     StringBuilder jsonResults = new StringBuilder(); 
 
     try { 
 
      StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON); 
 
      sb.append("?key=" + API_KEY); 
 
      sb.append("&components=country:gr"); 
 
      sb.append("&input=" + URLEncoder.encode(input, "utf8")); 
 

 
      URL url = new URL(sb.toString()); 
 

 
      System.out.println("URL: "+url); 
 
      conn = (HttpURLConnection) url.openConnection(); 
 
      InputStreamReader in = new InputStreamReader(conn.getInputStream()); 
 

 
      // Load the results into a StringBuilder 
 
      int read; 
 
      char[] buff = new char[1024]; 
 
      while ((read = in.read(buff)) != -1) { 
 
       jsonResults.append(buff, 0, read); 
 
      } 
 
     } catch (MalformedURLException e) { 
 
      Log.e(LOG_TAG, "Error processing Places API URL", e); 
 
      return resultList; 
 
     } catch (IOException e) { 
 
      Log.e(LOG_TAG, "Error connecting to Places API", e); 
 
      return resultList; 
 
     } finally { 
 
      if (conn != null) { 
 
       conn.disconnect(); 
 
      } 
 
     } 
 

 
     try { 
 

 
      // Create a JSON object hierarchy from the results 
 
      JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
 
      JSONArray predsJsonArray = jsonObj.getJSONArray("predictions"); 
 

 
      // Extract the Place descriptions from the results 
 
      resultList = new ArrayList<String>(predsJsonArray.length()); 
 
      for (int i = 0; i < predsJsonArray.length(); i++) { 
 
       System.out.println(predsJsonArray.getJSONObject(i).getString("description")); 
 
       System.out.println("============================================================"); 
 
       resultList.add(predsJsonArray.getJSONObject(i).getString("description")); 
 
      } 
 
     } catch (JSONException e) { 
 
      Log.e(LOG_TAG, "Cannot process JSON results", e); 
 
     } 
 

 
     return resultList; 
 
    } 
 

 
    class GooglePlacesAutocompleteAdapter extends ArrayAdapter<String> implements Filterable { 
 
     private ArrayList<String> resultList; 
 

 
     public GooglePlacesAutocompleteAdapter(Context context, int textViewResourceId) { 
 
      super(context, textViewResourceId); 
 
     } 
 

 
     @Override 
 
     public int getCount() { 
 
      return resultList.size(); 
 
     } 
 

 
     @Override 
 
     public String getItem(int index) { 
 
      return resultList.get(index); 
 
     } 
 

 
     @Override 
 
     public Filter getFilter() { 
 
      Filter filter = new Filter() { 
 
       @Override 
 
       protected FilterResults performFiltering(CharSequence constraint) { 
 
        FilterResults filterResults = new FilterResults(); 
 
        if (constraint != null) { 
 
         // Retrieve the autocomplete results. 
 
         resultList = autocomplete(constraint.toString()); 
 

 
         // Assign the data to the FilterResults 
 
         filterResults.values = resultList; 
 
         filterResults.count = resultList.size(); 
 
        } 
 
        return filterResults; 
 
       } 
 

 
       @Override 
 
       protected void publishResults(CharSequence constraint, FilterResults results) { 
 
        if (results != null && results.count > 0) { 
 
         notifyDataSetChanged(); 
 
        } else { 
 
         notifyDataSetInvalidated(); 
 
        } 
 
       } 
 
      }; 
 
      return filter; 
 
     } 
 
    } 
 

 
}

+0

Haben Sie Serverschlüssel für die Platz-API verwendet? –

Antwort

1

Sie haben Geocoding-Dienst nicht aktiviert. Um Google Place zu erhalten, muss die Geocodierung aktiviert sein.

Google Console

wählen Google Maps Geocoding API und aktiviert es.

+0

Ich habe den Fehler gelöst, indem ich den Server-Schlüssel anstelle des Android-Schlüssels benutze. Ich habe auch "Google Maps Geocoding API" dank Ihnen aktiviert. Aber Problem ist jetzt, ich bekomme nur Vorschläge von bestimmten Orten. Wenn ich nach Delhi suche, bekomme ich nichts. Ich füge auch Screenshot hinzu. @Pratik – CodeAssasins

+0

Können Sie bitte versuchen, API-Schlüsselparameter zu entfernen und WS-Aufruf zu machen? –

+0

Ich habe versucht, aber bekam die Fehlermeldung 'Dieser Dienst erfordert einen API-Schlüssel.' @Pratik – CodeAssasins

-1

akzeptiert Das Problem ist, dass Sie die Google Places API für Android verwenden, können Sie die Google Places API Web Service verwenden.

Here und here ist ein Beispiel für die Verwendung des Google Places-API-Webdiensts. Sie verwenden definitiv das letztere.

Aktivieren Sie die API Web Service Google Places und es wird funktionieren:

+0

Ich habe 'Google Places API Web Service' aktiviert, aber es zeigt immer noch denselben Fehler an @Jignesh – CodeAssasins

+0

Das sieht genauso aus wie der Text, den ich in [eine andere Antwort] geschrieben habe (http://Stackoverflow.com/a/31014444) ... In diesem Fall ist es falsch .... –

+0

Ich benutze Server Key und habe 'Google Maps Geocoding API', 'Google Places API für Android' und 'Google Places API Web Service' aktiviert. Sie können diesen Screenshot (http://imgur.com/1BuMNTO) für das aktuelle Ergebnis überprüfen. Kannst du erklären, warum es nur bestimmte Orte zeigt? Ich will auch Orte aus Indien. @DanielNugent – CodeAssasins

Verwandte Themen