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;
}
}
如何使用适配器将 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;
}
}