public Joke GETRandomJoke() { // Vi definerer først en ny RestClient med endepunktet vi henter fra miljøvariablen i konstruktøren over var client = new RestClient(this.APIURL); // Deretter definerer vi en RestRequest som holder detaljene fra spørringen vår // En RestRequest hører til en RestClient og får det generelle endepunktet fra denne // Det første argumentet er URL-parametre der vi i vårt eksempel ikke trenger noen fordi vi skal rett til base-URLen // Det andre argumentet forteller hvilken metode vi benytter var request = new RestRequest("", Method.GET); // Da kan vi kjøre spørringen vår! IRestResponse response = client.Execute(request); // La oss hente ut content fra responsen var content = response.Content; // Og la oss videre opprette en instans av Joke-klassen vår Joke joke = new Joke(); // Til slutt parser vi innholdet fra APIet til formen av av Joke-klassen vår og lagrer dette i joke-variabelen vår joke = JsonConvert.DeserializeObject <Joke>(content); return(joke); }
private async void btnGetJoke_Click(object sender, EventArgs e) { Joke j = await ChuckNorrisClient.GetRandomJoke(); txtJoke.Text = j.JokeText; }
using Xamarin.Forms; using static JokeApp.Joke; namespace JokeApp { public class JokeList : ContentPage { ObservableCollection<object> jokesCollection = new ObservableCollection<object>(); Joke jokeDisplay = new Joke(); ListView listViewJson = new ListView(); public JokeList() { if (!CrossConnectivity.Current.IsConnected) { Navigation.PushAsync(new Connection()); } GetJSON(); ViewModel = new PullToRefresh(); this.BindingContext = ViewModel; listViewJson = new ListView { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, IsPullToRefreshEnabled = true, RefreshCommand = LoadTestCommand, } ; listViewJson.SetBinding(ListView.IsRefreshingProperty, "IsBusy", BindingMode.OneWay); } public async void GetJSON() { try { var client = new System.Net.Http.HttpClient(); var response = await client.GetAsync("http://api.icndb.com/jokes"); string json = await response.Content.ReadAsStringAsync(); listViewJson.HasUnevenRows = true; listViewJson.ItemSelected += listViewJson_ItemSelected; if (json != "") { jokeDisplay = JsonConvert.DeserializeObject<Joke>(json); } DataTemplate template = new DataTemplate(typeof(CustomCell)); listViewJson.ItemTemplate = template; listViewJson.IsPullToRefreshEnabled = true; listViewJson.ItemsSource = jokesCollection; for (int i = 0; i < 10; i++) { jokesCollection.Add(jokeDisplay.value.ElementAt(i)); } listViewJson.ItemAppearing += (object sender, ItemVisibilityEventArgs e) => { var viewCellDetails = e.Item as object; int viewCellIndex = jokesCollection.IndexOf(viewCellDetails); if (viewCellIndex == jokesCollection.Count - 1) { var page = (jokesCollection.Count / 10); //skip already shown, add new ones for (int i = page * 10; i < (page * 10) + 10; i++) { jokesCollection.Add(jokeDisplay.value.ElementAt(i)); } } } ; listViewJson.IsPullToRefreshEnabled = true; Content = listViewJson; } catch (InvalidCastException e) { throw e; } } private void listViewJson_ItemSelected(object sender, SelectedItemChangedEventArgs e) { var item = e.SelectedItem as Value; Navigation.PushAsync(new JokeDetail(item)); } private PullToRefresh ViewModel { get; set; } private Command loadTestCommand; public Command LoadTestCommand { get { return loadTestCommand ?? (loadTestCommand = new Command(ExecuteLoadTestCommand, () => { return !ViewModel.IsBusy; } )); } } private async void ExecuteLoadTestCommand() { if (ViewModel.IsBusy) return; ViewModel.IsBusy = true; LoadTestCommand.ChangeCanExecute(); //DoStuff listViewJson.ItemsSource = jokesCollection; ViewModel.IsBusy = false; LoadTestCommand.ChangeCanExecute(); listViewJson.EndRefresh(); } } public class CustomCell : ViewCell { public CustomCell() { //instantiate each of our views Label lblJoke = new Label(); lblJoke.LineBreakMode = LineBreakMode.WordWrap; lblJoke.SetBinding(Label.TextProperty, "joke"); View = lblJoke; } } }