Использование спокойного веб-сервиса - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь использовать интерфейс, но у меня возникли некоторые трудности.Я пытаюсь установить его в виде списка 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 Я пробую следующее

public partial class JobsPage : ContentPage ,xxxWC.Interface.IApi
{
        public xxxWC.Interface.IApi api = new ful;

          public JobsPage ()
        {
            InitializeComponent ();
        }

        private Task SetItemSource()
    .   {
    .       JobListing.ItemsSource =   FuelAp
 }

Как правильно использовать приведенные выше задания get в методе setItemSource?.

Бит, который мне трудно понять, находится здесь.

Как мне вызвать базовый метод GetJobs, который у меня есть?уже создан в клиенте API.

      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 \ xxxCallManagmentAppxxxCallManagmentAppMobile \ FuelCallManagmentAppMobile \ Views \ JobsPage.xaml.cs 17 Active

Может кто-нибудь объяснить, почему

Edit 3 Ok, я получилнемного дальше, но все еще есть некоторые проблемы.так как основной метод не ожидается, как я могу вызвать setItemSource.

xxxApiClient _api ;
      public JobsPage ()
    {
        InitializeComponent ()
            SetItemSource();

    }

    private async Task SetItemSource()
 {
        JobListings.ItemsSource = await client.GetJobs();
}

1 Ответ

0 голосов
/ 20 мая 2018

Предполагая, что 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();
    }
}

Несмотря на то, что пользовательское событие было создано, вы также можете легко использовать его для обработчика событий / событий представления.

Весь этот код должен фактически находиться внутри модели представления и затем связываться спросмотр в контексте связывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...