";由于对象的当前状态,操作无效";尝试创建新列表时出错<;AudioTrack>;来自WP8中
本文关键字:quot 列表 新列表 出错 lt 来自 gt 创建 AudioTrack WP8 操作 | 更新日期: 2023-09-27 18:23:56
我正在尝试制作一个音乐应用程序,我有两个项目在解决方案中:一个Main项目和一个AudioPlaybackAgent(APA)项目。当我从我的主要项目中选择一首歌(包含在歌曲列表中)时,我将整个列表复制到ISolate Storage中的Json文件中,并从我的APA项目中读取。
问题是,当我试图从json文件中获得的项目创建新的AudioTrack时,我遇到了错误
创建文件的代码(来自我的主要项目)
public static void CreateOnlineList(string id, ObservableCollection<BasicItemModel> list)
{
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
string fileName = "OnlineList.json";
JObject obj = new JObject();
JArray arr = new JArray();
for (int dem = 0; dem < list.Count(); dem++)
{
if (list[dem].Id == id)
obj.Add("index", dem);
JObject item = new JObject();
item.Add("name", list[dem].Name);
item.Add("artist", list[dem].Artist);
item.Add("url", list[dem].Url);
arr.Add(item);
}
obj.Add("list", arr);
string jsonString = JsonConvert.SerializeObject(obj);
using (IsolatedStorageFileStream stream = file.OpenFile(fileName,FileMode.OpenOrCreate,FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine(jsonString);
}
}
}
}
读取此文件的代码(来自APA项目)
public static void ReadOnlineList()
{
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
string fileName = "OnlineList.json";
string jsonString = "";
using (IsolatedStorageFileStream stream = file.OpenFile(fileName, FileMode.Open, FileAccess.Read))
{
using (StreamReader writer = new StreamReader(stream))
{
jsonString = writer.ReadLine();
}
}
JObject obj = new JObject();
obj = JObject.Parse(jsonString);
AudioPlayer.currentTrackNumber = int.Parse(obj["index"].ToString());
List<JToken> arr = obj["list"].ToList();
if (AudioPlayer.playList == null) AudioPlayer.playList = new List<AudioTrack>();
else AudioPlayer.playList.Clear();
foreach (var item in arr)
{
AudioTrack track = new AudioTrack()
{
Source = new Uri(item["url"].ToString(), UriKind.Absolute),
Title = item["name"].ToString(),
Artist = item["artist"].ToString(),
Album = null
};
//// I get error of this line when trying to create an track
AudioPlayer.playList.Add(track);
}
}
}
AudioTrack对象有一些奇怪的行为,有两种方法可以插入/编辑AudioTrack的数据。
在这种情况下,您正在访问它的属性,并且您将生成所得到的错误。
你可以做两件事之一:
选项1-在构造函数中插入数据
AudioTrack track = new AudioTrack(new Uri(item["url"].ToString(), UriKind.Absolute), item["artist"].ToString(), null, null);
选项2-使用BeginEdit()和EndEdit()方法
AudioTrack track = new AudioTrack();
track.BeginEdit();
track.Source = new Uri(item["url"].ToString(), UriKind.Absolute);
track.Title = item["name"].ToString();
track.Artist = item["artist"].ToString();
track.EndEdit();
我希望这能帮助并回答你的问题。