當我嘗試在Windows Phone上保存列表時,出現「System.UnauthorizedAccessException:訪問被拒絕。」消息。System.UnauthorizedAccessException:訪問被拒絕。 Windows Phone在使用文件時
場景:
當在FavoriteButton點擊後,系統會檢查,如果該項目已經是人們喜愛。
下一步是調用Load方法。這將返回一個包含收藏夾的列表。
當項目最喜歡我會從列表中刪除它,否則我會添加它。
最後一步是使用我的Save方法保存新列表。
執行此代碼時,我得到以下異常:
System.UnauthorizedAccessException的:訪問被拒絕。 (異常來自HRESULT:0X80070005(E_ACCESSDENIED
我環顧四周,發現它可能是清單的功能,所以我必須檢查了所有的只是要確定再次嘗試我仍然得到異常後
。!必須我該怎麼辦代碼如下:?
private async void favoriteClicked(object sender, EventArgs e)
{
if (_progressIndicator.IsVisible == false)
{
try
{
Boolean isFavorite = Settings.GetValueOrDefault<Boolean>(currentArtist.id, false);
ArtistSaving favorite = new ArtistSaving(currentArtist.id, currentArtist.name, currentArtist.shortBio);
artistList = await Task.Run(() => Utils.Load<ArtistSaving>());
if (isFavorite == true)
{
artistList.Remove(favorite);
displayDeletePopup();
Settings.AddOrUpdateValue(currentArtist.id, false);
await Task.Run(() => Utils.Save<ArtistSaving>(artistList));
}
else
{
artistList.Add(favorite);
displayXamlPopup();
Settings.AddOrUpdateValue(currentArtist.id, true);
await Task.Run(() => Utils.Save<ArtistSaving>(artistList));
}
}
catch (ArgumentException ex)
{
}
}
}
收藏夾按鈕點擊
public static async Task<ObservableCollection<T>> Load<T>()
{
// Create a new folder name DataFolder.
var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(JSONFILENAME,
CreationCollisionOption.OpenIfExists);
var jsonSerializer = new DataContractJsonSerializer(typeof(ObservableCollection<T>));
var myStream = await file.OpenStreamForReadAsync();
ObservableCollection<T> myObj = (ObservableCollection<T>)jsonSerializer.ReadObject(myStream);
if (myObj == null)
{
return new ObservableCollection<T>();
}
return myObj;
}
這是Load方法
public static async void Save<T>(ObservableCollection<T> obj)
{
var serializer = new DataContractJsonSerializer(typeof(ObservableCollection<T>));
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(
JSONFILENAME, CreationCollisionOption.ReplaceExisting))
{
serializer.WriteObject(stream, obj);
}
}
,這是保存方法
編輯 - 解決方案:從當你從它讀
public static async Task<ObservableCollection<T>> Load<T>()
{
ObservableCollection<T> myObj = null;
// Create a new folder name DataFolder.
var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(JSONFILENAME,
CreationCollisionOption.OpenIfExists);
var jsonSerializer = new DataContractJsonSerializer(typeof(ObservableCollection<T>));
using (var myStream = await file.OpenStreamForReadAsync())
{
myObj = (ObservableCollection<T>)jsonSerializer.ReadObject(myStream);
if (myObj == null)
{
return new ObservableCollection<T>();
}
return myObj;
}
}
沒有必要使用「isFavorite == true」。 isFavorite已經是一個布爾值,所以你可以使用if(isFavorite)。 – Fabio 2015-02-24 17:27:09
多數民衆贊成是真的,謝謝;) – 2015-02-24 17:28:35