Asked by:
Getting Ads and Ad Gallery to ListView

Question
-
User969992919 posted
Hi,
I have below code in my project.
public class HomePageData { public int ad_id { get; set; } public static string ad_guid { get; set; } public string ad_gallery_guid { get; set; } public string user_guid { get; set; } public string display_name { get; set; } public string ad_currency { get; set; } public double? ad_price { get; set; } public DateTime created_date { get; set; } public ObservableCollection<AdGalleryData> gallery { get { return gallery1; } set { gallery1 = value; } } public ObservableCollection<AdGalleryData> gallery1 = new ObservableCollection<AdGalleryData>(); public HomePageData() { gallery.Add(new AdGalleryData()); // gallery.Add(new AdGalleryData() { gallery_image = "https://www.zeera.online/gallery/ads/" + ad_guid + "/" + gallery[0].ad_guid + ".png" }); } } public class AdGalleryData { public string ad_guid { get; set; } public string ad_gallery_guid { get; set; } private string gallery_image1 = "https://www.zeera.online/gallery/ads/25914ccb-7dd2-11e9-be21-0cc47a4422ec/8ac825c0-8399-11e9-be21-0cc47a4422ec.png"; public string gallery_image { get { return gallery_image1; // return string.Format("https://www.zeera.online/gallery/ads/{0}/{1}.png", HomePageData.ad_guid, ad_gallery_guid); } set { gallery_image1 = value; } } public AdGalleryData() { } }
and I am populating the data from my database like this:
public async void populate_homepage() { sort_by = Preferences.Get("HomePageSortBy", "ad_id"); sort_direction = Preferences.Get("HomePageSortDirection", "DESC"); var client = new HttpClient(); client.BaseAddress = new Uri("https://app.zeera.online/webservices/v1/release/www/populate_homepage_ads.php"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("language", "EN"), new KeyValuePair<string, string>("sort_by", sort_by), new KeyValuePair<string, string>("sort_direction", sort_direction) }); var response = await client.PostAsync("https://app.zeera.online/webservices/v1/release/www/populate_homepage_ads.php", content); var data = await response.Content.ReadAsStringAsync(); var result1 = JsonConvert.DeserializeObject<List<HomePageData>>(data); var result = result1.Distinct<HomePageData>(new ItemEqualityComparer()); ObservableCollection<HomePageData> trends; ObservableCollection<ObservableCollection<AdGalleryData>> datas = new ObservableCollection<ObservableCollection<AdGalleryData>>(); if (result != null) { trends = new ObservableCollection<HomePageData>(result); } else { trends = new ObservableCollection<HomePageData>(); var gallery = new ObservableCollection<AdGalleryData>(); datas.Add(gallery); for (int i = 0; i < datas.Count; i++) { trends.Add(new HomePageData() { gallery = datas[i] }); } } ListViewHomePage.ItemsSource = trends; loadingHomePage.IsVisible = false; ListViewHomePage.IsVisible = true; } class ItemEqualityComparer : IEqualityComparer<HomePageData> { public bool Equals(HomePageData x, HomePageData y) { return x.ad_id == y.ad_id; } public int GetHashCode(HomePageData obj) { return obj.ad_id.GetHashCode(); } }
Every ad is having multiple ad gallery [photo]
I have no issue getting the ads listed but how can I add the gallery?
the photo url is like this:
https://www.zeera.online/gallery/ads/[[[ad_guid]]]/[[[ad_guid]]].png
both ad_guid and ad_gallery_guid coming from the same populate_homepage_ads.php above
so how can I pass that to the public HomePageData()?
I tried to do it this way:
gallery.Add(new AdGalleryData() { gallery_image = "https://www.zeera.online/gallery/ads/" + ad_guid + "/" + ad_gallery_guid + ".png" });
but the ad_gallery_guid is unknown inside HomePageData()
Kindly help...
Thanks,
Tuesday, August 6, 2019 9:44 AM
All replies
-
User288213138 posted
Hi jrahma,
I'm sorry for not answering your question in time.
jrahma
gallery.Add(new AdGalleryData() { gallery_image = "https://www.zeera.online/gallery/ads/" + ad_guid + "/" + ad_gallery_guid + ".png" });
but the ad_gallery_guid is unknown inside HomePageData()
jrahma
public static string ad_guid { get; set; } public string ad_gallery_guid { get; set; }
In a class first execute the constructor, then assign a value to the property. So it's not possible to get the value of an attribute directly through a constructor unless the property is static, that's why you can get ad_guid but not ad_gallery_guid.
You can try below code, get ad_gallery_guid in get{}.
public ObservableCollection<AdGalleryData> gallery { get { ObservableCollection<AdGalleryData> data = new ObservableCollection<AdGalleryData>(); gallery.Add(new AdGalleryData() { gallery_image = "https://www.zeera.online/gallery/ads/" + HomePageData.ad_guid + "/" + ad_gallery_guid + ".png" }); return data; } set { gallery1 = value; } }
Best regards,
Sam.
Thursday, August 15, 2019 10:22 AM -
User969992919 posted
No Worries Sam
So you recommend to set ad_gallery_guid as static in this case?
From your above fix,
i changed my code as you can see below but it's not showing the data and here is the link:
https://www.jassimrahma.net/temp/populate_homepage_ads.php
public class HomePageData { public int ad_id { get; set; } public static string ad_guid { get; set; } public string ad_gallery_guid { get; set; } public string user_guid { get; set; } public string display_name { get; set; } public string ad_currency { get; set; } public double? ad_price { get; set; } public DateTime created_date { get; set; } /* public ObservableCollection<AdGalleryData> gallery { get { return gallery1; } set { gallery1 = value; } } */ public ObservableCollection<AdGalleryData> gallery { get { ObservableCollection<AdGalleryData> data = new ObservableCollection<AdGalleryData>(); gallery.Add(new AdGalleryData() { gallery_image = "https://www.zeera.online/gallery/ads/" + HomePageData.ad_guid + "/" + ad_gallery_guid + ".png" }); return data; } set { gallery1 = value; } } public ObservableCollection<AdGalleryData> gallery1 = new ObservableCollection<AdGalleryData>(); public HomePageData() { gallery.Add(new AdGalleryData()); // gallery.Add(new AdGalleryData() { gallery_image = "https://www.zeera.online/gallery/ads/" + ad_guid + "/" + gallery[0].ad_guid + ".png" }); gallery.Add(new AdGalleryData() { gallery_image = string.Format("https://www.zeera.online/gallery/ads/{0}/{1}.png", ad_guid, ad_gallery_guid) }); // CONSOLE OUTPUT TEMP System.Diagnostics.Debug.WriteLine("STARTING OUTPUT GALLERY"); for (int i = 0; i < gallery.Count; i++) { System.Diagnostics.Debug.WriteLine(string.Format("https://www.zeera.online/gallery/ads/{0}/{1}.png", gallery[i].ad_guid, gallery[i].ad_gallery_guid)); } System.Diagnostics.Debug.WriteLine("COMPLETED OUTPUT GALLERY"); // CONSOLE OUTPUT TEMP } } public class AdGalleryData { public string ad_guid { get; set; } public string ad_gallery_guid { get; set; } private string gallery_image1 = "https://www.zeera.online/gallery/ads/25914ccb-7dd2-11e9-be21-0cc47a4422ec/8ac825c0-8399-11e9-be21-0cc47a4422ec.png"; public string gallery_image { get { return gallery_image1; // return string.Format("https://www.zeera.online/gallery/ads/{0}/{1}.png", HomePageData.ad_guid, ad_gallery_guid); } set { gallery_image1 = value; } } public AdGalleryData() { } }
and populating the data here:
public async void populate_homepage() { sort_by = Preferences.Get("HomePageSortBy", "ad_id"); sort_direction = Preferences.Get("HomePageSortDirection", "DESC"); var client = new HttpClient(); client.BaseAddress = new Uri("https://www.jassimrahma.net/temp/populate_homepage_ads.php"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("language", "EN"), new KeyValuePair<string, string>("sort_by", sort_by), new KeyValuePair<string, string>("sort_direction", sort_direction) }); var response = await client.PostAsync("https://www.jassimrahma.net/temp/populate_homepage_ads.php", content); var data = await response.Content.ReadAsStringAsync(); var result1 = JsonConvert.DeserializeObject<List<HomePageData>>(data); var result = result1.Distinct<HomePageData>(new ItemEqualityComparer()); ObservableCollection<HomePageData> trends; ObservableCollection<ObservableCollection<AdGalleryData>> datas = new ObservableCollection<ObservableCollection<AdGalleryData>>(); if (result != null) { trends = new ObservableCollection<HomePageData>(result); } else { trends = new ObservableCollection<HomePageData>(); var gallery = new ObservableCollection<AdGalleryData>(); datas.Add(gallery); for (int i = 0; i < datas.Count; i++) { trends.Add(new HomePageData() { gallery = datas[i] }); } } ListViewHomePage.ItemsSource = trends; loadingHomePage.IsVisible = false; ListViewHomePage.IsVisible = true; }
Friday, August 16, 2019 12:12 PM