2016-11-28 7 views
0

Ich habe ein Gridview, die mit Links http://..../mobileapp/GetPostByCategoryXMLa?term_id=(item_id) Daten von JSON-Daten nimmt Ich mag würde, wenn es keine Internet-Verbindung ist, wenn ich auf dem „Try Again“ klicken, können Sie die Seite aktualisieren wieder (wenn Es gibt ein Verbindungsnetzwerk. XAML:Button-Handler, wenn Internet-Verbindung verloren

<Button x:Name="refreshBtn" Margin="0,15,0,0" Foreground="White" Width="100" Height="40" Content="Try Again" Background="#FF3C3C3C" BorderBrush="White" BorderThickness="1" Click="refreshBtn_Click"/> 

Voll Code:

public sealed partial class FurnitureCategory : Page 
{ 
    private ObservableCollection<Furniture> datasource = new ObservableCollection<Furniture>(); 

    public FurnitureCategory() 
    { 
     this.InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     //FurnitureHome item = e.Parameter as FurnitureHome; 
     Furniture detail = e.Parameter as Furniture; 
     StoreDetail(int.Parse(detail.ID));//send id 
     pageTitle.Text = detail.Title.ToString(); 
    } 

    private async void StoreDetail(int id) 
    { 
     statusKosong.Visibility = Visibility.Collapsed; 
     koneksiErrorStack.Visibility = Visibility.Collapsed; 
     requestErrorStack.Visibility = Visibility.Collapsed; 
     ConnectionProfile connections = NetworkInformation.GetInternetConnectionProfile(); 
     if (connections != null && connections.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess) 
     { 
      loading.IsActive = true; 
      try 
      { 
       Furniture detail = new Furniture(); 

       var httpClient = new HttpClient(new HttpClientHandler()); 
       string urlPath = "http://.../mobileapp/GetPostByCategoryXMLa?term_id="+id; 

       var values = new List<KeyValuePair<string, string>> 
       { 

       }; 

       HttpResponseMessage response = await httpClient.PostAsync(urlPath, new FormUrlEncodedContent(values)); 
       response.EnsureSuccessStatusCode(); 

       if (!response.IsSuccessStatusCode) 
       { 
        loading.IsActive = false; 
        RequestException(); 
       } 

       string jsonText = await response.Content.ReadAsStringAsync(); 
       JsonObject jsonObject = JsonObject.Parse(jsonText); 
       JsonArray jsonData1 = jsonObject["posts"].GetArray(); 

       foreach (JsonValue groupValue in jsonData1) 
       { 

        JsonObject groupObject = groupValue.GetObject(); 

        double menuId = groupObject["post_id"].GetNumber(); 
        string title = groupObject["post_title"].GetString(); 
        string image = groupObject["featured_image"].GetString(); 
        string deskripsi = groupObject["post_clean"].GetString(); 

        Furniture file = new Furniture(); 
        file.ID = menuId.ToString(); 
        file.Title = title; 
        file.Gambar = image; 
        file.Deskripsi = deskripsi; 

        datasource.Add(file); 
       } 

       if (jsonData1.Count > 0) 
       { 
        itemGridView.ItemsSource = datasource; 
       } 
       else 
       { 
        loading.IsActive = false; 
        statusKosong.Visibility = Visibility.Visible; 
       } 
      } 
      catch (HttpRequestException ex) 
      { 
       loading.IsActive = false; 
       RequestException(); 
      } 
     } 
     else 
     { 
      loading.IsActive = false; 
      ConnectionException(); 
     } 
    } 

    private void ConnectionException() 
    { 
     koneksiErrorStack.Visibility = Visibility.Visible; 
    } 

    private void RequestException() 
    { 
     requestErrorStack.Visibility = Visibility.Visible; 
    } 

    private void refreshBtn_Click(object sender, RoutedEventArgs e) 
    { 
     Furniture detail = new Furniture(); 
     StoreDetail(int.Parse(detail.ID)); 
    } 

    private void ItemView_ItemClick(object sender, ItemClickEventArgs e) 
    { 
     Furniture itemDetail = e.ClickedItem as Furniture; 
     DetailId.Text = itemDetail.ID; 
     DetailJudul.Text = itemDetail.Title; 
     DetailDeskripsi.Text = itemDetail.Deskripsi; 
     this.Frame.Navigate(typeof(FurnitureDetail), itemDetail); 
    } 

    private void Image_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     loading.IsActive = false; 
    } 

    private void cover_Loaded(object sender, RoutedEventArgs e) 
    { 
     loading.IsActive = false; 
    } 

    private void cover_Loading(FrameworkElement sender, object args) 
    { 
     loading.IsActive = true; 
    } 

    private void backButton_Click(object sender, RoutedEventArgs e) 
    { 
     this.Frame.GoBack(); 
    } 
} 

}

Möbel Klasse:

class Furniture 
    { 
     public string ID { get; set; } 

     public string Title { get; set; } 

     public string Gambar { get; set; } 

     public string Deskripsi { get; set; } 
    } 

Durch den obigen Code mit nicht funktioniert und eine Fehlermeldung angezeigt: error message

Wie geht das? Hinweis: ITEM_ID aus den Daten-ID auf der vorherige Seite für die Position genommen, die vom Benutzer ausgewählt wurde,

+1

Sie erstellen ein neues Objekt 'detail' und greifen auf dessen ID' detail.ID' zu, die null ist. Deshalb erhalten Sie 'ArgumentNullException'. – Prajwal

+0

Können Sie meinen Code reparieren? Wie bekomme ich ID von der Methode StoreDetail (int id)? – Rose

+0

was macht diese Möbelklasse? – Joseph

Antwort

0

Im RefreshBtn_Click, haben Sie eine neue Schaltfläche erstellen, aber das wird die Detail-ID nicht geben Wert, da es ein neues ist (es wird nichts erhalten/erhalten). Allerdings frage ich mich auch, warum du eine Möbelklasse machst, eine Methode aufrufst, eine andere Möbelklasse machst und ihr den gleichen 'Detail'-Namen gibst.

Versuchen Sie, eine Möbelklasse zu erstellen, in der die Detail-ID angegeben wird. Dies könnte schließlich außerhalb beider Methoden geschehen, indem es am Anfang deklariert wird.

+0

In der Methode StoreDetail (int id) enthalten auch Möbel Klasse. Wie deklariere ich ID auf refreshBtn? Ich gebe den vollständigen Code auf meinem Post – Rose

+0

Das hängt davon ab, wie Sie es verwenden, aber ich gebe einen Parameter an die – Steven

+0

Sorry, versehentlich geklickt. Aber ich werde der Klasse einen Parameter geben, wenn ich es gemacht habe. , wie: "Möbel f ​​= neue Möbel (int 1)". und dann in der Klasse selbst, wird der Parameter auf die Variable gesetzt. – Steven

Verwandte Themen