[英]Consuming a restful web service
我正在嘗試使用一個接口,但是在這里遇到了一些困難。 我正在嘗試將其設置為內容頁面后面的xamrin列表視圖
public class xxxApiClient : IApi
{
readonly string url = "http://localhost:81/ ";
readonly IHttpService httpService;
public xxxApiClient(IHttpService httpService)
{
this.httpService = httpService;
}
public Task<List<JobsList>> GetJobs() => httpService.Get<List<JobsList>>($"{url}JobsLists");
}
我如何不確定我如何承擔getjobs correclty我正在嘗試以下
public partial class JobsPage : ContentPage ,xxxWC.Interface.IApi
{
public xxxWC.Interface.IApi api = new ful;
public JobsPage ()
{
InitializeComponent ();
}
private Task SetItemSource()
. {
. JobListing.ItemsSource = FuelAp
}
如何在上面的setItemSource方法中正確使用get作業?
我很難理解的地方在這里。
如何調用已經在API客戶端中創建的基本GetJobs方法。
Task<List<JobsList>> IApi.GetJobs()
{
throw new NotImplementedException();
}
private Task SetItemSource()
{
JobListings.ItemsSource =await GetJobs();
}
}
根據下面的建議編輯2確定我這樣更新了我的代碼
IHttpService httpService;
xxxApiClient _api = newxxxApiClient(httpService);
public JobsPage ()
{
InitializeComponent ();
}
private Task SetItemSource()
{
JobListings.ItemsSource =await GetJobs();
}
但我得到以下錯誤
嚴重性代碼說明項目文件行抑制狀態錯誤CS0236字段初始化程序無法引用非靜態字段,方法或屬性'JobsPage.httpService'xxxCallManagmentAppMobile C:\\ Work \\ xxxCallAppDev \\ XamForms \\ xxxCallManagmentApp \\ xxxCallManagmentAppMobile \\ FuelCallManagmentAppMobile \\ Views \\ JobsPage。 xaml.cs 17有效
有人可以解釋為什么
編輯3好吧,我走了一些,但仍然有一些問題。 由於尚未等待主要方法,我如何調用set SetItemSource。
xxxApiClient _api ;
public JobsPage ()
{
InitializeComponent ()
SetItemSource();
}
private async Task SetItemSource()
{
JobListings.ItemsSource = await client.GetJobs();
}
假設IApi
已映射到xxxApiClient
實現
嘗試使用DependencyService解決服務,以便可以在視圖中使用它
public partial class JobsPage : ContentPage {
public readonly IApi client;
public JobsPage () {
InitializeComponent ();
client = DependencyService.Get<IApi>();
}
private async Task SetItemSource() {
JobListing.ItemsSource = await client.GetJobs();
//...
}
}
至於調用SetItemSource
,它是異步的,因此應等待。 那不能在構造函數中完成。
考慮創建一個可以引發的事件,並將其處理程序用於等待所需的行為。
private event EventHandler loadingData = delegate { };
private async void onLoadingData(object sender, Eventargs args) {
JobListing.ItemsSource = await client.GetJobs();
}
完整代碼
public partial class JobsPage : ContentPage {
public readonly IApi client;
public JobsPage () {
InitializeComponent ();
//resolving client
client = DependencyService.Get<IApi>();
//subscribing to event
loadingData += onLoadingData;
//raising event
loadingData(this, EventArgs.Empty);
}
private async Task SetItemSource() {
JobListing.ItemsSource = await client.GetJobs();
//...
}
private event EventHandler loadingData = delegate { };
private async void onLoadingData(object sender, Eventargs args) {
JobListing.ItemsSource = await client.GetJobs();
}
}
盡管創建了自定義事件,但您可以輕松地使用視圖的事件/事件處理程序。
所有這些代碼實際上應該存在於視圖模型內部,然后在綁定上下文中綁定到視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.