2016-06-09 7 views
0

Ich habe Probleme bei der Anzeige von Daten durch die Übernahme von Daten aus JSON (Arrays im Array). Das heißt, wenn der gridview ausgewählt, dann sofort die Anwendung beenden und eine Fehlermeldung angezeigt werden, wie weiter unten: error message Code:Fehler Anzeige Json Daten auf Gridview ItemClick

private BukuAudio itemDetail = null; 

public async void StoreAll() 
{ 
    try 
    { 
     var client = new Windows.Web.Http.HttpClient(); 
     string urlPath = "website"; 
     var values = new List<KeyValuePair<string, string>> 
     { 

     }; 
     var response = await client.PostAsync(new Uri(urlPath), new Windows.Web.Http.HttpFormUrlEncodedContent(values)); 
     response.EnsureSuccessStatusCode(); 
     string jsonText = await response.Content.ReadAsStringAsync(); 
     JsonObject jsonObject = JsonObject.Parse(jsonText); 
     JsonArray jsonData1 = jsonObject["data"].GetArray(); 

     foreach (JsonValue groupValue in jsonData1) 
     { 
       JsonObject groupObject = groupValue.GetObject(); 
       string nid = groupObject["sku"].GetString(); 
       string title = groupObject["judul"].GetString(); 
       string deskripsi = groupObject["deskripsi"].GetString(); 
       string tipe = groupObject["tipe"].GetString(); 
       var bundleObj = groupObject["bundle"]; 
       if (bundleObj.ValueType == JsonValueType.Array) 
       { 
        JsonArray bundle = bundleObj.GetArray(); 
        foreach (JsonValue groupValue1 in bundle) 
       { 

        JsonObject groupObject1 = groupValue1.GetObject(); 
         string bundleName = groupObject1["bundle_file"].GetString(); 
         string pathFile = groupObject1["path_file"].GetString(); 
         BukuAudio file1 = new BukuAudio(); 
        file1.BundleName = bundleName; 
           file1.Tipe = tipe1; 
           if (file1.Tipe == "0") 
           { 
            file1.BundlePath = pathFile + bundleName + ".pdf"; 
           } 
           else if (file1.Tipe == "1") 
           { 
            file1.BundlePath = pathFile + bundleName + ".mp3"; 
           } 
       } 
      } 

      BukuAudio file = new BukuAudio(); 
      file.SKU = nid; 
      file.Judul = title; 
      file.Deskripsi = deskripsi; 
      file.Tipe = tipe; 

      if (bundleObj.ValueType == JsonValueType.Array) 
      { 
       datasource.Add(file); 
      } 
     } 

     if (jsonData1.Count > 0) 
     { 
      itemGridView.ItemsSource = datasource; 
     } 
    } 
    catch 
    { 
    } 

private void ItemView_ItemClick(object sender, ItemClickEventArgs e) 
{ 
    ProductDetail.IsOpen = true; 
    itemDetail = e.ClickedItem as BukuAudio; 
    DetailSKU.Text = itemDetail.SKU; 
    DetailJudul.Text = itemDetail.Judul; 
    DetailDeskripsi.Text = itemDetail.Deskripsi; 
    DetailBundleName.Text = itemDetail.BundleName; 
    DetailTipe.Text = itemDetail.Tipe; 
} 

Ich habe debuggen file1.bundleName und Daten nicht leer ist, aber wenn es wird auf die Daten wird null itemDetail.BundleName

Wie geht es damit?

+0

stellen Sie sicher, dass mit Debugger Daten in diesem Code Bündel kommen und bundle_file Name korrekt foreach (JsonValue groupValue1 in Bündel) { JsonObject groupObject1 = groupValue1.GetObject() ist; string bundleName = groupObject1 ["bundle_file"]. GetString();} –

Antwort

0

was bedeutet, dass itemDetail.BundleName ist null Sie dieses Problem durch den folgenden Code lösen:

DetailBundleName.Text = itemDetail.BundleName==null?"":itemDetail.BundleName; 

Welche prüfen wird, ob BundleName null ist oder nicht, wenn es null ist die assign "" zum DetailBundleName.Text sonst weisen Sie der Wert der BundleName.

Hinweis: - Wenn es eine Änderung für das Erhalten von null in jeder Eigenschaft gibt, ist es eine wate Mühe, jede Eigenschaft jedes Mal zu überprüfen, wenn Sie auf den Wert von es zugreifen. Anstatt dies zu tun, behandeln Sie es in der Eigenschaft Getter; Der folgende Code wird Ihnen helfen:

class BukuAudio 
{ 
    private string _BundleName; 

    public string MyProperty 
    { 
     get 
     { 
      if (_BundleName == null) return ""; 

      return _BundleName; 
     } 
     set { _BundleName = value; } 
    } 
} 
+0

Warum itemDetail.BundleName null sein? Während file1.BundleName nicht null ist. – Rose

0

Von Ihrem Codes, die die Elemente Ihrer Gridview hinzugefügt ist das Dateiobjekt:

if (bundleObj.ValueType == JsonValueType.Array) 
{ 
    datasource.Add(file); 
} 

Aber Sie die bundle von Dateiobjekt verpassen Einstellung. Um das Problem zu beheben Ihre Codes überarbeiten wie unten:

foreach (JsonValue groupValue in jsonData1) 
    { 
      ... 
      string tipe = groupObject["tipe"].GetString(); 
      string bundleName="";//This line should be added; 
      var bundleObj = groupObject["bundle"]; 
      if (bundleObj.ValueType == JsonValueType.Array) 
      { 
       JsonArray bundle = bundleObj.GetArray(); 
       foreach (JsonValue groupValue1 in bundle) 
      { 

       JsonObject groupObject1 = groupValue1.GetObject(); 
       bundleName = groupObject1["bundle_file"].GetString();//This line should be edited; 
        ... 
      } 
     } 

     BukuAudio file = new BukuAudio(); 
     file.SKU = nid; 
     file.Judul = title; 
     file.Deskripsi = deskripsi; 
     file.Tipe = tipe; 
     file.BundleName=bundleName;//This line should be added. 

Anmerkungen: Ich habe Kommentare in welcher Zeile ich die Codes überarbeitet.

+0

Wenn ich wie der obige Code ändern, wird der Code Fehler wie im Bild: https://onedrive.live.com/redir?resid=D40E9E24C5BFA2EA!13835&authkey=!ACB03_li2VaCQJ8&v=3&ithint=photo%2cpng – Rose

+0

Haben Sie die Zeile hinzufügen , wo ist mein erster Kommentar (string bundleName = "")? Es gibt insgesamt drei Stellen, die bearbeitet werden müssen. –

+0

wo die Zeile String bundleName = "" hinzufügen? Weil in Ihrem Code oben keine solche Zeile ist? und zu diesem Code: if (bundleObj.ValueType == JsonValueType.Array) { Datenquelle.Add (Datei); } gibt es eine Fehlermeldung: "Lokale Datei kann nicht verwendet werden, bevor sie" – Rose