Xamarin:如何在网络服务响应之前阻止导航到另一个页面
Xamarin: How to prevent navigation to another page until web-service responds
我正在尝试调用网络服务来检索将在下一页上显示的数据。但是,页面试图在完成 Web 服务请求之前显示 空数据 。
你能帮我解决这个问题吗?
//代码
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += async (s, e) =>
{
getEmployeepage(mainContact.managerID);
await Navigation.PushAsync(new ManagerDetailsPage(data()));
};
manager.GestureRecognizers.Add(tapGestureRecognizer);
//获取数据的方法
public async void getEmployeepage(String searchvalue)
{
EmployeeDetailsPage employeeDetailsPage = null;
try
{
var client = new System.Net.Http.HttpClient();
client.BaseAddress = new Uri("http://..........");
var response = await client.GetAsync("criterion?empId=" + searchvalue);
string jsonString = response.Content.ReadAsStringAsync().Result;
//rest of the logic
}
}
提前致谢。
您的方法应该可以等待。所以 public async void getEmployeepage(String searchvalue)
变成 public async Task getEmployeepage(String searchvalue)
。有了这个,您可以像这样等待您的方法:
await getEmployeepage(mainContact.managerID);
使用 Async 属性扩展异步方法名称也是一个好习惯。您的方法名称将更改为 GetEmployeePageAsync。另一个好的做法是总是 return 一个任务。因此使方法可等待。此模式的唯一例外是事件处理程序。
您需要 await
您的异步调用并将您的 getEmployeepage
方法形式 async void
更改为 async Task
:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += async (s, e) =>
{
await getEmployeepage(mainContact.managerID);
await Navigation.PushAsync(new ManagerDetailsPage(data()));
};
manager.GestureRecognizers.Add(tapGestureRecognizer);
&
public async Task getEmployeepage(String searchvalue)
{
EmployeeDetailsPage employeeDetailsPage = null;
try
{
var client = new System.Net.Http.HttpClient();
client.BaseAddress = new Uri("http://..........");
var response = await client.GetAsync("criterion?empId=" + searchvalue);
string jsonString = await response.Content.ReadAsStringAsync();
//rest of the logic
}
}
我正在尝试调用网络服务来检索将在下一页上显示的数据。但是,页面试图在完成 Web 服务请求之前显示 空数据 。 你能帮我解决这个问题吗?
//代码
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += async (s, e) =>
{
getEmployeepage(mainContact.managerID);
await Navigation.PushAsync(new ManagerDetailsPage(data()));
};
manager.GestureRecognizers.Add(tapGestureRecognizer);
//获取数据的方法
public async void getEmployeepage(String searchvalue)
{
EmployeeDetailsPage employeeDetailsPage = null;
try
{
var client = new System.Net.Http.HttpClient();
client.BaseAddress = new Uri("http://..........");
var response = await client.GetAsync("criterion?empId=" + searchvalue);
string jsonString = response.Content.ReadAsStringAsync().Result;
//rest of the logic
}
}
提前致谢。
您的方法应该可以等待。所以 public async void getEmployeepage(String searchvalue)
变成 public async Task getEmployeepage(String searchvalue)
。有了这个,您可以像这样等待您的方法:
await getEmployeepage(mainContact.managerID);
使用 Async 属性扩展异步方法名称也是一个好习惯。您的方法名称将更改为 GetEmployeePageAsync。另一个好的做法是总是 return 一个任务。因此使方法可等待。此模式的唯一例外是事件处理程序。
您需要 await
您的异步调用并将您的 getEmployeepage
方法形式 async void
更改为 async Task
:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += async (s, e) =>
{
await getEmployeepage(mainContact.managerID);
await Navigation.PushAsync(new ManagerDetailsPage(data()));
};
manager.GestureRecognizers.Add(tapGestureRecognizer);
&
public async Task getEmployeepage(String searchvalue)
{
EmployeeDetailsPage employeeDetailsPage = null;
try
{
var client = new System.Net.Http.HttpClient();
client.BaseAddress = new Uri("http://..........");
var response = await client.GetAsync("criterion?empId=" + searchvalue);
string jsonString = await response.Content.ReadAsStringAsync();
//rest of the logic
}
}