Google Places api 无法自动完成新 api 库中的搜索查询

Posted

技术标签:

【中文标题】Google Places api 无法自动完成新 api 库中的搜索查询【英文标题】:Google places api fails to autocomplete the search query in the new api libraray 【发布时间】:2020-06-10 00:21:12 【问题描述】:

我正在使用 AsyncTask 来获取我的结果。我在 doinbackground 方法中收到一个错误,说它试图在空对象引用上调用方法。

这是我的代码 私有类 PlaceListTask 扩展 AsyncTask>

    private String strAddress;

    public PlaceListTask(String strAddress) 
        super();
        this.strAddress = strAddress;
    

    public String getStrAddress() 
        return strAddress;
    

    public void setStrAddress(String strAddress) 
        this.strAddress = strAddress;
    

    @Override
    protected ArrayList<AutocompletePrediction> doInBackground(String... params) 
  List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME /* add more Place.Field. fields as you need*/);
        FindCurrentPlaceRequest request =
                FindCurrentPlaceRequest.newInstance(placeFields);


            Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
            placeResponse.addOnCompleteListener(task -> 
                if (task.isSuccessful()) 
                    FindCurrentPlaceResponse response = task.getResult();
                    for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) 
                        Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                                placeLikelihood.getPlace().getName(),
                                placeLikelihood.getLikelihood()));
                    
                 else 
                    Exception exception = task.getException();
                    if (exception instanceof ApiException) 
                        ApiException apiException = (ApiException) exception;
                        Log.e(TAG, "Place not found: " + apiException.getStatusCode());
                    
                
            );
      return null;
    

这是我得到的错误 尝试调用接口方法 'com.google.android.gms.tasks.Task com.google.android.libraries.places.api.net.PlacesClient.findCurrentPlace(com.google.android.libraries.places.api.net.FindCurrentPlaceRequest )' 在空对象引用上

【问题讨论】:

你遇到了什么错误? 我现在已将错误添加到问题中 你检查 API 密钥是否正确? 我已经检查过了,它是正确的 这可能对你有帮助***.com/questions/54668523/… 【参考方案1】:

在调用 placesClient.findCurrentPlace(request) 之前,请检查 placesClient 是否为空。

【讨论】:

已连接但找不到任何位置 1.你用的是真机吗? 2. 你是这样初始化placeClient的吗:placesClient = Places.createClient(context) 我使用的是真实设备,并且 api 已成功初始化,但是当我搜索它时,会记录不应该找到的地方 试试FindCurrentPlaceRequest findCurrentPlaceRequest = FindCurrentPlaceRequest.builder(placeFields).build(); 代替:FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields); 它没有用。我只是想将已弃用的 API 转换为新的地方 API。这就是我遇到此类问题的原因

以上是关于Google Places api 无法自动完成新 api 库中的搜索查询的主要内容,如果未能解决你的问题,请参考以下文章

Google Places 自动完成的替代方案 [关闭]

Places API 自动完成问题

Google Places Api,放置自动完成入站查询

使用 Google PLACES Api 搜索查看自动完成建议

如何为 Google Places API 自动完成文本框设置默认值

Google Places API Android:自动完成关闭太快