2015-07-10 91 views
2

我想从Google's Places Api与Xamarin Android的基本自动完成功能。Xamarin Android谷歌地方Api自动完成破

我使用的是Xamarin的Google Play Services - Location库版本25.0.0.0。

我已经成功地得到一个查询返回结果的点,同时下面this example code

这是我使用测试代码的片段

public class PlaceAutocomplete: BaseFragment, IGoogleApiClientOnConnectionFailedListener { 
    IGoogleApiClient client; 
    public override void OnCreate(Bundle savedInstanceState) { 
     base.OnCreate(savedInstanceState); 
     client = new GoogleApiClientBuilder(Activity) 
              .EnableAutoManage(Activity as BaseFragmentActivity, 0, this) 
              .AddOnConnectionFailedListener(OnConnectionFailed) 
              .AddApi(Places.GEO_DATA_API) 
              .Build(); 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Places.GeoDataApi.GetAutocompletePredictions(client, "cul", 
     new LatLngBounds(new LatLng(33.515071, -118.796427), new LatLng(34.435985, -117.127371)), null) 
     .SetResultCallback<AutocompletePredictionBuffer>(AutocompleteResult); 

     return base.OnCreateView(inflater, container, savedInstanceState); 
    } 

    public void AutocompleteResult(AutocompletePredictionBuffer buffer) { 

     if(!buffer.Status.IsSuccess) { 
      Toast.MakeText(Activity, buffer.Status.StatusMessage, ToastLength.Long).Show(); 
      return; 
     } 

     var a = new List<IAutocompletePrediction>(); 
     for(var i = 0; i < buffer.Count; i++) { 
      var item = buffer.Get(i); 
      if(item is IAutocompletePrediction) { 
       a.Add((IAutocompletePrediction) item); 
      } else { 
       //all the results go in here 
      } 
     } 

     Toast.MakeText(Activity, a.Count.ToString(), ToastLength.Long).Show(); 
    } 

    public void OnConnectionFailed(ConnectionResult result) { 

    } 
} 

有5返回的结果从GetAutocompletePredictions方法,但他们的所有类型名为com.google.android.gms.location.places.internal.zzb,不能转换为IAutocompletePrediction,我没有找到任何方式来使用它们。

我做错了什么或者Xamarin的Google Play图书馆的这部分功能没有完全实现?

+0

如果你的要求是从一个地方API只自动完成那么这可能对您有所帮助,下载使用REST请求http://appliedcodelog.blogspot.in/2015/05/google-place-api-with-autocomplete-in.html – Suchith

回答

3

编辑 - 新信息

这是不是一个错误。该IAutocompletePrediction目前不Xamarin实现的,所以你必须为了使用它投它这样

item.JavaCast<IAutocompletePrediction>() 

较早,情报

我已经说过了Xamarin支持,他们已经确认这是一个错误。

的bug修复更多信息可以在这里https://bugzilla.xamarin.com/show_bug.cgi?id=31878

0

发现由于

Xamarin 4.0.0.1717/

Xamarin.Android 6.0.0.35/

Xamarin谷歌播放服务地点组件v 27.0.0.0

,似乎在这个领域有一些工作。 IEnumerable接口现在提供一种方式来获得一个类型化的反应,和下面的代码片段(更换AutocompleteResult的一部分)的工作原理:

var a = new List<IAutocompletePrediction>(); 
String t = ""; 
foreach (IAutocompletePrediction x in buffer) 
{ 
    a.Add(x); 
    t += "\n" + x.GetFullTextFormatted(new StyleSpan(TypefaceStyle.Normal)).ToString(); 
} 

Toast.MakeText(Activity, t /* a.Count.ToString() */, ToastLength.Long).Show(); 
相关问题