我如何使json查询等待电话's位置

本文关键字:位置 电话 等待 何使 json 查询 | 更新日期: 2023-09-27 18:18:35

这里我试图发送一个带有纬度和经度的json查询,但这些值将作为NaN,即使我调用ShowMyLocationOnTheMap,它首先检索电话位置。我如何使showMyLocation方法首先完成,然后调用json查询。你能帮我吗?

public partial class ClosestBusStops : PhoneApplicationPage
{
    WebClient webClient;
    public ClosestBusStops()
    {
        InitializeComponent();
        ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
        webClient = new WebClient();
        webClient.DownloadStringCompleted += webClient_DownloadStringCompleted;
        string jsonQuery= "www.blabla.com?lat="+App.lat+"&lng="+App.lng;
        webClient.DownloadStringAsync(new Uri(jsonQuery));
    }
    private async void ShowMyLocationOnTheMap(GeoPositionAccuracy accuracy)
    {
        Geolocator myGeolocator = new Geolocator();
        Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
        Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
        GeoCoordinate myGeoCoordinate = CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
        App.lat = myGeoCoordinate.Latitude;
        App.lng = myGeoCoordinate.Longitude;
        this.pushPin(this.mapWithMyLocation, myGeoCoordinate);
    }
}

更新
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            await ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
}
private async Task ShowMyLocationOnTheMap(GeoPositionAccuracy accuracy)
        {
            Geolocator myGeolocator = new Geolocator();
            Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
            Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
            GeoCoordinate myGeoCoordinate = CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
            App.lat = myGeoCoordinate.Latitude;
            App.lng = myGeoCoordinate.Longitude;
            this.pushPin(this.mapWithMyLocation, myGeoCoordinate);
        }

我如何使json查询等待电话's位置

ShowMyLocationOnTheMap是一个异步方法,所以如果你想等待这个方法的完成,你需要使用await关键字,像这样:

await ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);

因为你不能在构造函数中使用await,你需要把它移到其他地方,比如OnNavigatedTo方法或Loaded事件处理程序。

ShowMyLocationOnTheMap的返回类型也应该是Task而不是void

更新:

    public ClosestBusStops()
    {
        InitializeComponent();
    }
    private async Task ShowMyLocationOnTheMap(GeoPositionAccuracy accuracy)
    {
        Geolocator myGeolocator = new Geolocator();
        Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
        Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
        App.lat = myGeoCoordinate.Latitude;
        App.lng = myGeoCoordinate.Longitude;
        this.pushPin(this.mapWithMyLocation, myGeoCoordinate);
    }
    protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        await ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
        webClient = new WebClient();
        webClient.DownloadStringCompleted += webClient_DownloadStringCompleted;
        string jsonQuery= "www.blabla.com?lat="+App.lat+"&lng="+App.lng;
        webClient.DownloadStringAsync(new Uri(jsonQuery));
    }