【问题标题】:Xamarin forms geolocator plugin working intermittentlyXamarin 形成间歇性工作的地理定位器插件
【发布时间】:2017-10-27 12:37:07
【问题描述】:

我们正在尝试在 Xamarin Forms 项目中使用插件“Xam.Plugin.Geolocator”。该项目目前只有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);
    }

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

谢谢

编辑

通过“工作”,我的意思是我们希望它使用用户当前位置数据访问我们的 API,并在每次用户下拉刷新、页面初始加载或当他们加载时从 API 返回新结果按特定选项卡。目前它偶尔会工作,非常偶尔。

我们无法使用连接到 macbook 的手机进行调试,因为我们安装了地理定位器插件,因此应用程序在连接时总是崩溃。除了位置信息外,该应用程序在部署到设备时似乎工作正常。我们目前正在通过 Microsoft 移动中心进行部署以测试设备。

【问题讨论】:

  • 当它不“工作”时,Exception/Stacktrace 或返回的位置是什么?
  • 异常信息是什么?

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


【解决方案1】:

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

我们已经设法通过将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 是让它工作的原因。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多