我需要你的帮助。
... UIViewControl
var data= await track.QueryCategory(link);
if(data!=null)
{
var get_data=JsonConvert.DeserializeObject<Categorycs.RootObject>(data);
_table = new UITableView {
Frame = new CoreGraphics.CGRect (0, 0, View.Bounds.Width, View.Bounds.Height),
Source= new TableSoundCloudSource(get_data.tracks)
};
View.AddSubview (_table);
}
TableSource.cs
public class TableSource: UITableViewSource
{
List<string> tableItems;
string cellIdentifier="TableCell";
public TableSource (List<string> items)
{
tableItems = items;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return tableItems;
}
public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);
if (cell == null) {
cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier);
} else
cell.TextLabel.Text = tableItems [indexPath.Row];
return cell;
}
}
}
Public class Categorycs
{
public class RootObject
{
public List<Track> tracks { get; set; }
public string tag { get; set; }
public string next_href { get; set; }
}
}
public class Track
{
public string urn { get; set; }
public string uri { get; set; }
public string permalink { get; set; }
public string permalink_url { get; set; }
public string title { get; set; }
public string description { get; set; }
public string track_type { get; set; }
public string genre { get; set; }
public string tag_list { get; set; }
public int duration { get; set; }
public bool? downloadable { get; set; }
public string download_url { get; set; }
public int original_content_size { get; set; }
public bool streamable { get; set; }
public bool commentable { get; set; }
public string sharing { get; set; }
public string created_at { get; set; }
public string updated_at { get; set; }
public string isrc { get; set; }
public string state { get; set; }
public int? likes_count { get; set; }
public int? playback_count { get; set; }
public int? reposts_count { get; set; }
public int? download_count { get; set; }
public int? comment_count { get; set; }
public string embeddable_by { get; set; }
public string license { get; set; }
public string artwork_url { get; set; }
public string stream_url { get; set; }
public string waveform_url { get; set; }
public string purchase_url { get; set; }
public string purchase_title { get; set; }
public bool reveal_comments { get; set; }
public bool reveal_stats { get; set; }
public bool feedable { get; set; }
public bool geo_blocking { get; set; }
public object geo_blockings { get; set; }
public bool embeddable { get; set; }
public string label_name { get; set; }
public string release_date { get; set; }
public object schedule { get; set; }
public Visuals visuals { get; set; }
public object publisher_metadata { get; set; }
public object monetization { get; set; }
public int user_id { get; set; }
public User user { get; set; }
public string policy { get; set; }
public string monetization_model { get; set; }
public object secret_token { get; set; }
public object secret_uri { get; set; }
public object publisher_state { get; set; }
public string last_modified { get; set; }
public object disabled_at { get; set; }
public object disabled_reason { get; set; }
public bool has_downloads_left { get; set; }
public string kind { get; set; }
public int id { get; set; }
}
错误:错误CS1503:参数#1'不能 convertSystem.Collections.Generic.List&LT; 'Categorycs.Track' &GT;”表达 输入`string []'。
答案 0 :(得分:0)
在这里,您传递的是TableSource get_data.tracks,这是一个List<Track>
:
Source= new TableSoundCloudSource(get_data.tracks)
但是在这里,您告诉TableSource接受List<string>
public TableSource (List<string> items)
这是&#34;类型不匹配&#34; - 期望A类型的对象,但是你传递的是B类对象。在某些情况下,它可以自动将A转换为B,但在这种情况下不会。
(我假设它被命名为&#34; TableSoundCloudSource&#34;在一个地方和&#34; TableSource&#34;在另一个地方的事实是剪切和粘贴错误。如果不是,那是你的代码的另一个问题。)
您需要修改您的TableSource以接受List<Track>
(这将需要多次更改),或者您需要将List<string>
传递给它,这是它目前所期望的。
您报告的第二个错误是因为:
public override nint RowsInSection(UITableView tableview, nint section)
{
return tableItems;
}
该函数应该返回一个nint
,但是你要返回tableItems,这是一个List
(它对于什么样的列表并不重要)。您真正想要返回的是tableItems.Count
,这是列表中元素的数量。
这段代码总是错误的,但由于早期的问题,编译器可能永远都不会告诉你这很糟糕。调试是这样的 - 修复一个bug可以发现(或创建)更多。你只需要偷偷摸摸它们直到它起作用。
最后,
cell.TextLabel.Text = tableItems [indexPath.Row];
Text是一个字符串,tableItems [indexPath.Row]是一个Track。您无法将音轨分配给字符串 - 这是另一种类型不匹配。相反,这样做
cell.TextLabel.Text = tableItems [indexPath.Row].title;
由于Track
的标题属性为string
,因此可以使用(我假设您要使用标题 - 您可以使用任何字符串属性,也可以自动使用转换为字符串)
请注意,这与Xamarin无关 - 它是基本的C#,也是概念上基本的编程。