0

我创建了一个非常简单的测试应用程序来尝试将我当前的纬度/经度反向地理编码为地址。

这是我的 ViewModel 的代码:

namespace LoginProductsMVVM.Core.ViewModels
{
    public class ProductDetailViewModel
        : MvxViewModel
    {
        public void Init(Product product)
        {
            Product = product;
        }

        private Product _product;
        public Product Product
        {
            get { return _product; }
            set { _product = value;
                RaisePropertyChanged (() => Product); }
        }

        private string _latitude;
        public string Latitude{
            get { return _latitude; }
            set { _latitude = value; RaisePropertyChanged(() => Latitude); }
        }

        private string _longitude;
        public string Longitude{
            get { return _longitude; }
            set { _longitude = value; RaisePropertyChanged(() => Longitude); }
        }

        private string _address;
        public string Address{
            get { return _address; }
            set { _address = value; RaisePropertyChanged(() => Address); }
        }

        private IMvxGeoLocationWatcher _watcher;
        public IMvxGeoLocationWatcher Watcher
        {
            get 
            {
                _watcher = Mvx.Resolve<IMvxGeoLocationWatcher> ();
                return _watcher;
            }
        }

        public ProductDetailViewModel(IMvxGeoLocationWatcher watcher)
        {
            _watcher = watcher;
            _watcher.Start (new MvxGeoLocationOptions (), OnLocation, OnError);
        }

        void OnLocation (MvxGeoLocation location)
        {
            Latitude = location.Coordinates.Latitude.ToString();
            Longitude = location.Coordinates.Longitude.ToString();

            // Android Location specific stuff
            var activity = Mvx.Resolve<IMvxAndroidCurrentTopActivity> ().Activity;
            Geocoder geocdr = new Geocoder (activity.BaseContext);

            IList<Address> addresses = geocdr.GetFromLocation (double.Parse(Latitude), double.Parse(Longitude), 1);

            addresses.ToList().ForEach ((addr) => Address += addr.ToString() + "\r\n\r\n");
        }

        void OnError (MvxLocationError error)
        {
            Mvx.Error ("Seen location error {0}", error);
        }
    }
}

我的 OnLocation 方法中有一个断点,但它永远不会进入那里。我是否遗漏了一些东西才能在 Android 上正常工作?它似乎适用于 iOS...

4

2 回答 2

1

每奥达汉在这里:

嗯......我调查了更多:这个问题是已知的,可以在许多设备上看到。这不是 MvvmCross 问题。简短的回答:设备需要重新启动,一切都像魅力一样工作......谷歌似乎发送了一些导致问题的更新。这是一个关于这个问题的线程和一个关于 GeoCode 类的类似问题:

https://code.google.com/p/android/issues/detail?id=38009

所以:可以关闭,MvvmCross 可以,但其他人可能会遇到这个错误,所以我的解释和链接在这里。

于 2013-07-23T17:49:36.037 回答
0

当你说它永远不会触发“成功”时,成功真的会发生吗?

GPS代码中可能有很多问题 - 例如您的应用程序可能没有权限,您的手机可能禁用了A-GPS或GPS,或者您甚至可能在无位置模拟器上运行 - 所有这些都是可能的从你的描述。

还值得注意的是,Xamarin.Android 长期以来一直存在断点问题 - 因此添加跟踪比依赖断点命中要好:/


也许尝试从http://mvvmcross.wordpress.com/运行 N=8 - 这有帮助吗?(N=9 也值得一看,因为它展示了一种允许多个视图模型使用 geowatcher 的方法)

于 2013-07-17T15:44:55.630 回答