C# 在xamarin android中将Json数组绑定到listview时出错

C# 在xamarin android中将Json数组绑定到listview时出错,c#,android,listview,xamarin,C#,Android,Listview,Xamarin,我试图将JSON数组响应绑定到listview,但我的activity.cs类中出现了一些错误。我做错了什么。请帮帮我,我是android的新手 WCF服务响应 [{ "Region":"String content", "ID":21, "Msg":"String content", "Status":214 }] regionModel.cs public class regionModel { public int ID { ge

我试图将JSON数组响应绑定到listview,但我的activity.cs类中出现了一些错误。我做错了什么。请帮帮我,我是android的新手

WCF服务响应

[{
    "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; }

    }
 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 );
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;
    }
  }
}
活动.cs

public class regionModel
    {

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

    }
 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 );
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;
    }
  }
}
List regionItems=new List();
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.HomeScreen);
listView=findviewbyd(Resource.Id.List);
var client=新的RestClient(“http://azurewebsites.net/");
var请求=新的重新请求(“RegionService/GetRegions”,Method.POST);
request.RequestFormat=DataFormat.Json;
regionItems=client.Execute(request.Data);
JSONArray JA=新JSONArray(区域性);
对于(int i=0;i
HomeScreenAdapter.cs

public class regionModel
    {

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

    }
 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 );
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;
    }
  }
}
public class HomeScreenAdapter:BaseAdapter{
清单项目;
活动语境;
公共家庭影院(活动背景、列表项目)
:base()
{
this.context=上下文;
这个项目=项目;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖表项此[int位置]
{
获取{返回项目[位置];}
}
公共覆盖整数计数
{
获取{return items.Count;}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var项目=项目[位置];
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
视图=context.LayoutInflater.Inflate(Resource.Layout.CustomView,null);
view.findviewbyd(Resource.Id.Text1).Text=item.Region;
返回视图;
}
}
}

请阅读文档:(注意大写字母“L”)和JSONArray.GetJSONObject()(大写字母“G”)以及JSONObject.GetString()(大写字母“G”)


Xamarin倾向于遵循C#命名约定,而不是Android使用的Java约定。

“出现一些错误”-如果您准确地告诉我们您遇到了什么错误,以及在哪里,这将非常有用。@Jason它显示了一个带有红色标记的错误,告诉我们jsonobject和lenght不包含定义。在哪里?具体是哪几行?具体的错误消息是什么?我更正了命名对流,但是对于这个regionItems.Add(jsonObject.GetString(“ID”);它显示错误“无法从字符串转换为regionModel”。@dafodil和in-JSONArray JA=new-JSONArray(regionItems);对于JA,我得到的是空值。这里我使用newton.json和restsharp库。1。regionItems是regionModel的列表,但您试图添加一个字符串(ID),这将不起作用。您需要将整个json对象反序列化为regionModel,然后将其添加到列表中。Newtonsoft数组是JArray。JSONArray是一个原生Android类。