簡體   English   中英

消耗寧靜的Web服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM