2015-04-20 61 views
0

我使用Google Places API for Android,我似乎無法得到PendingResultresultCallback。這裏是我的代碼(示例代碼到https://github.com/googlesamples/android-play-places/tree/master/PlaceComplete基本相同,除了在對話框)Google Places API Android resultCallback沒有觸發

adapter = ((MainActivity) getActivity()).getAdapter(); 
googleApiClient = ((MainActivity) getActivity()).getGoogleApiClient(); 

final AutoCompleteTextView tvCity = new AutoCompleteTextView(getActivity()); 
tvCity.setAdapter(adapter); 

tvCity.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     final PlacesAutoCompleteAdapter.PlaceAutocomplete item = adapter.getItem(position); 
     final String placeId = String.valueOf(item.placeId); 

     PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi 
       .getPlaceById(googleApiClient, placeId); 
     placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() { 
      @Override 
      public void onResult(PlaceBuffer places) { 

      if (places.getStatus().isSuccess()) { 
        final Place place = places.get(0); 
        cityCoordinates = place.getLatLng(); 

       } else { 
        dialog.dismiss(); 
        Toast.makeText(getActivity(), "There was an error, please try again", Toast.LENGTH_SHORT).show(); 
        return; 

       } 
       dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
       places.release(); 
      } 
     }); 
    } 
}); 
+0

您是否爲API創建了密鑰,是否已添加到項目等? – AlvaroSantisteban

+0

@AlvaroSantisteban當然,自動完成部分本身工作正常。就在我點擊autocompletetextview中的一個項目時,ResultCallback部分從不會觸發。 –

回答

3

我有同樣的問題,因爲我錯過了,它允許API訪問谷歌的基於Web的服務的許可

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
+1

是的,謝謝!我很驚訝有關這個問題的文件太少了...... –

+0

不客氣!什麼讓我更加困惑的是,我的應用程序中的GeoDataApi.getPlaceById調用只有在我使用相同的API密鑰在我的設備上運行官方示例後才能工作一小段時間。 Google Play服務必須緩存API密鑰授權,然後允許該密鑰從不請求READ_GSERVICES權限的其他應用使用。 –

+0

是的,我有同樣的經歷! –

1

作爲參考,對任何人誰訪問了這個問題,你一定要做下面的所有3個步驟:

添加您的API密鑰到您的應用清單

<application> 
... 
<meta-data 
    android:name="com.google.android.geo.API_KEY" 
    android:value="YOUR_API_KEY"/> 
</application> 

然後包括在您的表現爲@Alex貝克建議

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

而且也使谷歌Places API的爲Android。 Google Places API是一個不同的API,您的呼叫將失敗,Places AutoComplete status 9001

+1

您不需要那裏的地圖API_KEY用於Google地方信息的Android API –

+0

您是絕對正確的Alex,我碰巧擁有地圖API_KEY,因爲我使用的是Google地圖V2 API,並且我認爲它適用於地方API太...但是,不,那是錯誤的。即使它是相同的密鑰,我們也必須將它放在Android清單上的自己的標籤中。 – kouretinho

+0

完成了所有3個步驟。仍然沒有被調用 –