自动完成时发生自动完成错误:OVER_QUERY_LIMIT

时间:2019-02-18 15:18:19

标签: android google-maps google-places-api google-places

当我尝试在地点自动完成功能中搜索时,我得到了无法加载搜索结果 日志说

  

“自动填充时出现错误:OVER_QUERY_LIMIT”

我已启用https://console.cloud.google.com/ 和API密钥效果很好。

enter image description here

Java代码

    String apiKey = "MY API KEY";
    private RadioGroup mRadioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_costumer_map);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);

        Places.initialize(getApplicationContext(), apiKey);

        PlacesClient placesClient = Places.createClient(this);
          // Initialize the AutocompleteSupportFragment.
        AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
                getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);

        // Specify the types of place data to return.
        autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

        // Set up a PlaceSelectionListener to handle the response.
        autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                destination = place.getName().toString();
                destinationLatLng = place.getLatLng();

                Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
            }

            @Override
            public void onError(Status status) {
                Log.e(TAG, "onError: " + status);
            }
        });

XML代码

       <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:layout_margin="20sp">

        <fragment
            android:id="@+id/place_autocomplete_fragment"
            android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.v7.widget.CardView>

3 个答案:

答案 0 :(得分:2)

您收到OVER_QUERY_LIMIT消息,因为您尚未在developers console中为项目启用结算

  

要使用Android版Places SDK,必须在所有API请求中包含API key,并且必须在每个项目上enable billing

查看this link了解更多信息和价格。

SKU:基本数据

  

“基本”类别中的字段包含在“地方信息”请求的基本费用中,不会产生任何额外费用。请求以下任何字段时,都会触发基本数据SKU:ADDRESS,ID,LAT_LNG,NAME,OPENING_HOURS,PHOTO_METADATAS,PLUS_CODE,TYPES,USER_RATINGS_TOTAL,VIEWPORT。

您可以在上面提供的same link中查看价格和其他SKU。

答案 1 :(得分:0)

OVER_QUERY_LIMIT表示您已超出配额。 主要原因是:

  

如果超出使用限制,您将获得OVER_QUERY_LIMIT状态码作为响应。

     

这意味着Web服务将停止提供正常响应,并切换为仅返回状态代码OVER_QUERY_LIMIT,直到再次允许更多使用为止。可能会发生:

     
      
  1. 在几秒钟内,如果由于您的应用程序每秒发送太多请求而收到错误。
  2.   
  3. 在接下来的24小时内,如果由于您的应用程序每天发送过多请求而收到错误。每日配额在太平洋时间午夜重置。
  4.   

您还可以检查以下详细信息:https://developers.google.com/maps/premium/previous-licenses/articles/usage-limits

答案 2 :(得分:0)

如果使用here所述的Places SDK PLACES_API_RATE_LIMIT_EXCEEDED现已弃用的Play服务版本,则会收到com.google.android.gms:play-services-places错误:

注意:如果您的Android应用遇到9005 PLACES_API_RATE_LIMIT_EXCEEDED错误,则您可能正在使用Android版Places SDK的已弃用版本。 Android版Places SDK的Google Play服务版本(例如com.google.android.gms:play-services-places)已于2019年1月29日弃用,并于2019年7月29日关闭。新版本适用于Android的Places SDK。我们建议尽快更新到新版本。有关详细信息,请参阅迁移指南。

您必须在build.gradle中替换以下行:

implementation 'com.google.android.gms:play-services-places:<VERSION>'

使用:

implementation 'com.google.android.libraries.places:places:2.2.0'

请注意,版本2或更高版本需要androidx。在撰写本文时,不需要androidx的最新版本是1.1.0。