Xamarin形成间歇性地工作的geolocator插件

时间:2017-10-27 12:37:07

标签: ios xamarin xamarin.ios xamarin.forms geolocation

我们正在尝试使用插件" Xam.Plugin.Geolocator"在我们的Xamarin Forms项目中。该项目目前仅限IOS。

我们的应用会根据设备用户的当前位置返回商家列表。我们点击API返回我们的JSON格式列表数据,API运行正常。

我们希望每当用户下拉,更改选项卡以及页面最初加载时更新列表,但目前这只在大约100次尝试中工作一次或两次。我还没有找到一个模式,说明它失败的原因,或者确实是它失败的原因。

我们在页面加载时设置应用程序属性,选择选项卡并且用户刷新如下 -

public async void GetLocation()
    {
        try
        {

              locator = CrossGeolocator.Current;

            if (locator.IsGeolocationAvailable && locator.IsGeolocationEnabled)
            {

                var position = await locator.GetPositionAsync();

                App.Current.Properties["Longitude"] = position.Longitude.ToString();
                App.Current.Properties["Latitude"] = position.Latitude.ToString();
            }
            else 
            {
                await DisplayAlert("Location Error", "Unable to retrieve location at this time", "Cancel");
            }
        }catch(Exception e)
        {
                await DisplayAlert("Location Error", "Unable to retrieve location at this time","Cancel");
        }

    }

我们在三个方面调用上述方法

1)加载页面时

        public NearbyPage()
    {

        InitializeComponent();
        GetLocation();
        SetNearbyBusinesses();
        NearbyBusinesses = new List<NearbyBusiness>();
        SetViewData();

        SetViewVisibility();
    }

2)单击选项卡时

        protected override void OnAppearing()
    {
        base.OnAppearing();
        GetLocation();

        SetNearbyBusinesses();
        NearbyLocationsView.ItemsSource = NearbyBusinesses;
        NoLocationsView.ItemsSource = UserMessages;
        SetViewVisibility();
    }

3)当用户下拉刷新时

public void RefreshData()
    {

        if (!CrossConnectivity.Current.IsConnected)
        {
            NoInternetMessage.IsVisible = true;
            return;
        }
        GetLocation();
        NoInternetMessage.IsVisible = false;
        SetNearbyBusinesses();
        NearbyLocationsView.ItemsSource = NearbyBusinesses;
        NoLocationsView.ItemsSource = UserMessages;

        SetViewVisibility();

        _analyticsService.RecordEvent("Refresh Event: Refresh nearby businesses", AnalyticsEventCategory.UserAction);
    }

任何人都可以了解我们的错误或有使用此插件的经验,可以帮助我们解决此问题吗?

谢谢

修改

通过&#34; work&#34;,我的意思是我们希望用用户当前位置数据点击我们的API,并在每次用户下拉刷新时从API返回新结果,页面最初加载或按特定选项卡时加载。目前偶尔会偶尔使用它。

我们无法使用连接到macbook的手机进行调试,因为我们安装了geolocator插件后,应用程序在连接时始终崩溃。除了位置之外,应用程序在部署到设备时似乎工作正常。我们目前正通过微软移动中心部署测试设备。

1 个答案:

答案 0 :(得分:0)

好的,所以调试器总是崩溃并且无法看到任何堆栈跟踪等,我们在黑暗中拍摄了几张照片。

我们已经设法通过我们的代码堆栈向我们的方法签名添加async来实现这一点。这解决了问题,地理位置和刷新工作正常。

例如,当我们更改上述方法3.刷新数据时,它工作得很好。

public async Task RefreshData()
{

    if (!CrossConnectivity.Current.IsConnected)
    {
        NoInternetMessage.IsVisible = true;
        return;
    }
    GetLocation();
    NoInternetMessage.IsVisible = false;
    SetNearbyBusinesses();
    NearbyLocationsView.ItemsSource = NearbyBusinesses;
    NoLocationsView.ItemsSource = UserMessages;

    SetViewVisibility();

    _analyticsService.RecordEvent("Refresh Event: Refresh nearby businesses", AnalyticsEventCategory.UserAction);
}

我们重构了更多代码,但添加async是它的工作原理。

我希望这可以帮助别人节省一些时间。