JSON 内容对象到 Listview.Adapter 使用 BaseAdapter

JSON Content Object to Listview.Adapter using BaseAdapter

如何使用适配器将 json 对象结果放入列表视图?

对象class

 public class ScVsrList
    {
        public int vnd { get; set; }

        public string drref { get; set; }
        public int dpt { get; set; }

        public string dname { get; set; }

        public int sdp { get; set; }
        public int cls { get; set; }
        public string cname { get; set; }


        public int ctn { get; set; }

        public List<ScDrList> drList2 { get; set; }


    }

    public class ScDrList
    {
        public int vnd2 { get; set; }

        public string drref { get; set; }


    }
   public  class StoreConsignorVsrObject
    {
        public string status { get; set; }

        public string env { get; set; }
        public string vsr { get; set; }
        public string type { get; set; }

        public List<ScVsrList> drList { get; set; }


    }


*我的代码使用来自 XAMARIN 的 REST 客户端 ANDROID *

var client = new RestClient("http://10.121.4.72:10010/web/services/getVSRdt");
                var request = new RestRequest(Method.POST);

                request.AddHeader("Content-type", "application/json");

                var requestObject = new VsrRequestObject
                {
                    env = "DSP",
                    vsr = GlobalVariable.VsrNumber,
                    token = "967F058F023DA12798F2D41CDC2F2A5C6D4A6F5D40069A80V3S98R9RFPDT"

                };

                request.AddJsonBody(requestObject);
                var response = client.Execute(request);
                var content = response.Content;

                StoreConsignorVsrObject item = JsonConvert.DeserializeObject<StoreConsignorVsrObject>(content);

                if (item != null)
                {
                    LayoutInflater inflate = LayoutInflater.From(this);
                    View view = inflate.Inflate(Resource.Layout.activity_storeconsignorvsrmonitoring, null);
                    alertBuilder = new Android.Support.V7.App.AlertDialog.Builder(this);
                    alertBuilder.SetView(view);

                    contentDialog = alertBuilder.Create();


                    BtnReturnDialog = FindViewById<Button>(Resource.Id.btnReturn);
                    listViewStoreConsignor = FindViewById<ListView>(Resource.Id.listViewStoreConsignor);
                    listViewStoreConsignor.Adapter = new StoreConsignorDetailAdapter(this, item);

                }
                else
                {
                    DialogHelper.ShowAlertMessage(this, "Error Data Findings", "No Detail Found");
                    return;
                }


StoreConsignorDetailAdapter


        public class StoreConsignorDetailAdapter : BaseAdapter<StoreConsignorVsrObject>
        {
            private StoreConsignorVsrObject items;
            AppCompatActivity activity;


            public StoreConsignorDetailAdapter(AppCompatActivity activity, StoreConsignorVsrObject items)
            {
                this.items = items;
                this.activity = activity;

            }


            public override StoreConsignorVsrObject this[int position]
            {
                get
                {
                    return items[position];
                }
            }

            public override int Count
            {
                get
                {
                    return items.Count;
                }
            }

            public override long GetItemId(int position)
            {
                return position;
            }

            public override View GetView(int position, View convertView, ViewGroup parent)
            {
                var item = items[position];
                View view = convertView;

                if (view == null)
                {
                    view = activity.LayoutInflater.Inflate(Resource.Layout.adapter_storeconsignorvsrmonitoring, null);
                }

                var detail = item.drList.FirstOrDefault();

                view.FindViewById<TextView>(Resource.Id.txtViewVendorNum).Text = detail.vnd.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewVdrNumber).Text = detail.drref.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewTotal).Text = detail.ctn.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewMvdr).Text = detail.drList2.Count.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewDepartment).Text = detail.dname;
                view.FindViewById<TextView>(Resource.Id.txtViewStatus).Text = "SHIPPED";


                return view;
            }



        }


我的适配器出现错误

错误 1:无法将索引应用于项[position][=17 中的 'object' 类型的表达式=]

    public override StoreConsignorVsrObject this[int position]
            {
                get
                {
                    return items[position];
                }
            }


     public override View GetView(int position, View convertView, ViewGroup parent)
            {
                var item = items[position];
                View view = convertView;

                if (view == null)
                {
                    view = activity.LayoutInflater.Inflate(Resource.Layout.adapter_storeconsignorvsrmonitoring, null);
                }

                var detail = item.drList.FirstOrDefault();

                view.FindViewById<TextView>(Resource.Id.txtViewVendorNum).Text = detail.vnd.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewVdrNumber).Text = detail.drref.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewTotal).Text = detail.ctn.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewMvdr).Text = detail.drList2.Count.ToString();
                view.FindViewById<TextView>(Resource.Id.txtViewDepartment).Text = detail.dname;
                view.FindViewById<TextView>(Resource.Id.txtViewStatus).Text = "SHIPPED";


                return view;
            }

ERR 2 无法将组方法 Count 转换为非委托类型 'int':

 public override int Count
            {
                get
                {
                    return items.Count;
                }
            }

我希望通过我的 json 输出得到一个干净的列表视图输出。我的 json 也由 Json 数组组成,所以它是一个嵌套的 Json。

一个问题是 StoreConsignorDetailAdapter 中的 items 应该是列表而不是单个 Object.So 您可以定义一个列表变量:

 private List<ScVsrList> drList;

你可以这样做:

public class StoreConsignorDetailAdapter: BaseAdapter<ScVsrList>
{
    private StoreConsignorVsrObject item;
    AppCompatActivity activity;

    private List<ScVsrList> drList;  // defile variable drList


    public StoreConsignorDetailAdapter(AppCompatActivity activity, StoreConsignorVsrObject item)
    {
        this.item = item;
        this.activity = activity;

        this.drList = item.drList; // assign value to drList 
    }


    public override ScVsrList this[int position]
    {
        get
        {
            return drList[position];
        }
    }

    public override int Count
    {
        get
        {
            return drList.Count;
        }
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = drList[position];
        View view = convertView;

        if (view == null)
        {
            view = activity.LayoutInflater.Inflate(Resource.Layout.adapter_storeconsignorvsrmonitoring, null);
        }

        //var detail = drList.FirstOrDefault();

        view.FindViewById<TextView>(Resource.Id.txtViewVendorNum).Text = item.vnd.ToString();
        view.FindViewById<TextView>(Resource.Id.txtViewVdrNumber).Text = item.drref.ToString();
        view.FindViewById<TextView>(Resource.Id.txtViewTotal).Text = item.ctn.ToString();
        view.FindViewById<TextView>(Resource.Id.txtViewMvdr).Text = item.drList2.Count.ToString();
        view.FindViewById<TextView>(Resource.Id.txtViewDepartment).Text = item.dname;
        view.FindViewById<TextView>(Resource.Id.txtViewStatus).Text = "SHIPPED";


        return view;
    }

}