2016-07-19 14 views
0

私はこれを使用して、autocompletetextviewのアドレスを提案として取得しました。 Google Places APIを有効にしてAndroid Keyを生成しました。しかし、私はこのエラーThis IP, site or mobile application is not authorized to use this API key. Request received from IP address <IP>, with empty refererを取得するアプリを実行するとき。私が間違っていることがありますか?この点に関して誰かが私を助けることができれば、それは素晴らしいことでしょう。ありがとう。Google places API認証エラー

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

placekeyにserverkeyを使用していますか? –

答えて

1

をあなたはジオコーディングサービスを有効にしていません。場所Googleを取得するには、ジオコーディングを有効にする必要があります。

Google Console

Google Maps Geocoding APIを選択し、それを可能にしました。

+0

アンドロイドキーの代わりにサーバーキーを使用してエラーを解決しました。また、Google Maps Geocoding APIをご利用いただきありがとうございます。しかし問題は今私は特定の場所の提案を得ることです。私がデリーを探しているとき、私は何も得ていない。スクリーンショットも追加しています。 @Pratik – CodeAssasins

+0

APIのキーパラメータを削除してWS呼び出しをしようとしますか? –

+0

「このサービスはAPIキーが必要です」というエラーメッセージが表示されました。@Pratik – CodeAssasins

-1

問題は、あなたがGoogleプレイスAPI Webサービスを使用している、Android向けGoogleプレイスAPIを使用していないということです を受け入れました。

Hereおよびhereは、GoogleプレイスAPIウェブサービスの使用例です。あなたは間違いなく後者を使用しています。

は、GoogleプレイスAPI Webサービスを有効にして、それが動作します:

+0

私は 'Google Places APIウェブサービス'を有効にしましたが、それでもまだ同じエラーを表示しています@Jignesh – CodeAssasins

+0

これは[別の回答](http://stackoverflow.com/a/31014444)で書かれたテキストと同じように見えます...また、この場合は間違っています.... –

+0

私はServer Keyを使用しています。私は 'Google Maps Geocoding API'、 'Android用Google Places API'と 'Google Places API Webサービス'を有効にしました。現在の結果については、このスクリーンショット(http://imgur.com/1BuMNTO)を確認することができます。特定の場所のみを表示する理由を説明できますか?私はインドからの場所も欲しい。 @DanielNugent – CodeAssasins