You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用placesClient.findAutocompletePredictions始终失败,已启用Places API仍报错

问题:Places Autocomplete预测任务始终失败,提示“prediction fetching task unsuccessful”

我使用placesClient.findAutocompletePredictions获取位置建议并设置到搜索栏,但调用代码时任务始终失败,我已经启用了Places API,请问原因是什么?

代码如下:

@Override public void onTextChanged(CharSequence s, int start, int before, int count) { 
    AutocompleteSessionToken token = AutocompleteSessionToken.newInstance(); 
    FindAutocompletePredictionsRequest predictionsRequest = FindAutocompletePredictionsRequest.builder() 
        .setCountry("sa") 
        .setTypeFilter(TypeFilter.ADDRESS) 
        .setSessionToken(token) 
        .setQuery(s.toString()) 
        .build(); 
    placesClient.findAutocompletePredictions(predictionsRequest).addOnCompleteListener(new OnCompleteListener<FindAutocompletePredictionsResponse>() { 
        @Override 
        public void onComplete(@NonNull Task<FindAutocompletePredictionsResponse> task) { 
            if (task.isSuccessful()) { 
                FindAutocompletePredictionsResponse predictionsResponse = task.getResult(); 
                if (predictionsResponse != null) { 
                    predictionList = predictionsResponse.getAutocompletePredictions(); 
                    List<String> suggestionsList = new ArrayList<>(); 
                    for (int i = 0; i < predictionList.size(); i++) { 
                        AutocompletePrediction prediction = predictionList.get(i); 
                        suggestionsList.add(prediction.getFullText(null).toString()); 
                    } 
                    materialSearchBar.updateLastSuggestions(suggestionsList); 
                    if (!materialSearchBar.isSuggestionsVisible()) { 
                        materialSearchBar.showSuggestionsList(); 
                    } 
                } 
            } else { 
                Log.i("mytag", "prediction fetching task unsuccessful"); 
            } 
        } 
    }); 
}

回答

我来帮你一步步排查这个问题,任务失败不一定只是API密钥的锅,我们从几个关键方向分析:

1. 先排查API密钥的核心细节

你说已经启用了Places API,但还有几个容易忽略的点:

  • 密钥的权限与限制:检查Google Cloud控制台中你的API密钥是否绑定了正确的Android包名和SHA-1指纹。如果密钥设置了应用限制,而你的测试设备/包名不匹配,请求会直接失败。
  • 确认启用的是正确的API:确保你启用的是Google Places API(而非旧版的Places SDK for Android),新的placesClient依赖这个API提供服务。
  • 额度与计费:检查是否超出了Places API的免费调用额度,或者是否未设置计费账户(部分API需要绑定计费才能正常使用,即使在免费额度内)。

2. 检查placesClient的初始化是否正确

如果placesClient没有正确初始化,后续所有请求都会失败。确认你在Activity/Fragment的onCreate中完成了初始化:

// 在onCreate中执行
Places.initialize(getApplicationContext(), "你的API密钥");
PlacesClient placesClient = Places.createClient(this);

如果初始化时API密钥错误,或者没有调用Places.initialize,placesClient会处于无效状态,导致请求失败。

3. 补充错误日志,获取具体失败原因

你当前只打印了任务失败的提示,但没有获取具体的异常信息。修改onComplete的失败分支,打印异常详情:

} else {
    Log.e("mytag", "prediction fetching failed", task.getException());
}

这会帮你直接定位问题:比如是API_KEY_INVALID、PERMISSION_DENIED、NETWORK_ERROR等,这是最有效的排查步骤。

4. 检查基础配置

  • 网络权限:确保你的AndroidManifest.xml中添加了互联网权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
    没有这个权限,应用无法发起网络请求,任务必然失败。
  • 国家代码与类型过滤:setCountry("sa")是沙特阿拉伯的正确代码,TypeFilter.ADDRESS也没问题,但如果你的测试输入确实没有匹配的地址结果,任务会成功但返回空列表——但你现在是任务失败,所以这不是原因。

先按上述步骤排查,尤其是打印异常信息,几乎能直接找到问题所在。


内容的提问来源于stack exchange,提问作者Aymen Ncr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:33:12