2016-03-24 3 views
0

Ich versuche, JSON-Array-Antwort an Listview zu binden, aber ich bekomme einen Fehler in meiner activity.cs-Klasse.Was mache ich falsch. Bitte helfen Sie mir, ich bin ein Neuling für Android.Fehler beim Binden von JSON-Array an Listview in Xamarin Android

WCF Service-Antwort

[{ 
    "Region":"String content", 
    "ID":21, 
    "Msg":"String content", 
    "Status":214 
}] 

regionModel.cs

public class regionModel 
    { 

     public int ID { get; set; } 
     public string Region { get; set; } 
     public string Msg { get; set; } 
     public int Status { get; set; } 

    } 

Activity.cs

List<regionTable> regionItems = new List<regionTable>(); 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.HomeScreen); 
      listView = FindViewById<ListView>(Resource.Id.List); 


        var client = new RestClient("http://azurewebsites.net/"); 
      var request = new RestRequest("RegionService/GetRegions", Method.POST); 
      request.RequestFormat = DataFormat.Json; 
      regionItems = client.Execute<List<regionTable>>(request).Data; 


      JSONArray JA = new JSONArray(regionItems); 

     for (int i = 0; i < JA.Length(); i++) 
     { 
      try 
      { 
       JSONObject jsonObject = JA.GetJSONObject(i); 
       regionItems.Add(jsonObject.GetString("ID"));  
      } 
      catch (JSONException e) 
      { 
       // e.printStackTrace(); 
      } 
     } 


      listView.Adapter = new HomeScreenAdapter(this,regionItems); 

HomeScreenAdapter. cs

public class HomeScreenAdapter : BaseAdapter<TableItem> { 
    List<TableItem> items; 
    Activity context; 
    public HomeScreenAdapter(Activity context, List<TableItem> items) 
     : base() 
    { 
     this.context = context; 
     this.items = items; 
    } 
    public override long GetItemId(int position) 
    { 
     return position; 
    } 
    public override TableItem this[int position] 
    { 
     get { return items[position]; } 
    } 
    public override int Count 
    { 
     get { return items.Count; } 
    } 
    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     var item = items[position]; 

     View view = convertView; 
     if (view == null) // no view to re-use, create new 
      view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null); 
     view.FindViewById<TextView>(Resource.Id.Text1).Text = item.Region; 

     return view; 
    } 
    } 
} 
+0

"Fehler bekommen" - es wäre sehr nützlich, wenn Sie uns genau sagen würden, welchen Fehler Sie bekommen und wo. – Jason

+0

@Jason zeigt Fehler mit roter Markierung an, die besagt, dass jsonobject und length keine Definition enthalten. – dafodil

+0

Wo? Welche spezifischen Linien? Und was ist die * spezifische * Fehlermeldung? – Jason

Antwort

0

Bitte lesen Sie die Dokumentation: JSONArray.Length() (Anmerkung captial "L") und JSONArray.GetJSONObject() (Kapital "G") und JSONObject.GetString() (Kapital "G").

Xamarin folgt den C# -Namenskonventionen, nicht der von Android verwendeten Java-Konvention.

+0

Ich korrigierte Namenskonvektion, aber für diese regionItems.Add (jsonObject.GetString ("ID")); Es zeigt den Fehler "kann nicht von String in regionModel konvertieren". – dafodil

+0

@dafodil und in JSONArray JA = neues JSONArray (regionItems); Für JA bekomme ich null Werte. Hier verwende ich newton.json und restsharp Bibliotheken. – dafodil

+0

1. regionItems ist eine Liste von regionModel, aber Sie versuchen, eine einzelne Zeichenfolge (ID) hinzuzufügen, die nicht funktionieren wird. Sie müssen das gesamte JSON-Objekt in ein regionModel deserialisieren und es dann der Liste hinzufügen. – Jason

Verwandte Themen