【问题标题】:JSON Content Object to Listview.Adapter using BaseAdapter使用 BaseAdapter 到 Listview.Adapter 的 JSON 内容对象
【发布时间】:2019-08-27 10:50:25
【问题描述】:

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

对象类

 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 ANDROID 的 REST 客户端 *

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:无法对来自 items[position]

的“对象”类型的表达式应用索引
    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 无法将组方法计数转换为非委托类型“int”:

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

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

【问题讨论】:

    标签: c# json object android-listview xamarin.android


    【解决方案1】:

    一个问题是您的StoreConsignorDetailAdapter 中的items 应该是列表而不是单个对象。因此您可以定义一个列表变量:

     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;
        }
    
    }
    

    【讨论】:

    • 谢谢兄弟今天试试。第一次在listview适配器中使用嵌套的json数组,很抱歉打断你。
    • 是的,我知道。我已经尝试过您的代码。你也可以自己试试。
    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多