При развертывании в эмуляторе и первом запуске мое приложение всегда вылетает при исключении нулевой ссылки.На последующих запусках работает просто отлично.Не очень хорошее взаимодействие с пользователем.
Мое приложение пытается загрузить XML-файл из: http://www.choomba.org/mxuutiset.xml, просто и макетировать для будущего веб-сервиса.
Мой вопрос, почему я получаюисключение нулевой ссылки?Я думаю, что следовал онлайн-учебнику к письму, но все же он не работает.Образец службы погоды работает просто отлично.
Что я делаю не так?
Я положил весь код на Skydrive, посмотрите: ссылка
Вот мой класс модели:
using System;
using AgFx;
using System.Collections.ObjectModel;
using MxSuomi.Models;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Linq;
using System.Globalization;
namespace AgFxTest
{
[CachePolicy(CachePolicy.NoCache)]
public class UutisetServiceModel : ModelItemBase<UutinenLoadContext>
{
public UutisetServiceModel() { }
public UutisetServiceModel(int id)
: base(new UutinenLoadContext(id))
{
}
private ObservableCollection<Uutinen> _uutiset = new ObservableCollection<Uutinen>();
public ObservableCollection<Uutinen> Uutiset
{
get { return _uutiset; }
set
{
if (value == null) throw new ArgumentNullException();
if (_uutiset != null)
{
_uutiset.Clear();
foreach (var item in value)
{
_uutiset.Add(item);
}
}
RaisePropertyChanged("Uutiset");
}
}
public class UutisetServiceModelLoader : IDataLoader<UutinenLoadContext>
{
private const string feedUri = "http://www.choomba.org/mxuutiset.xml?rnd={0}";
public LoadRequest GetLoadRequest(UutinenLoadContext loadContext, Type objectType)
{
string uri = string.Format(feedUri, loadContext.Id);
return new WebLoadRequest(loadContext, new Uri(uri));
}
public object Deserialize(UutinenLoadContext loadContext, Type objectType, System.IO.Stream stream)
{
XElement uutisetXml = XElement.Load(stream);
var temp = (from uutinen in uutisetXml.Descendants("uutinen")
select new Uutinen()
{
Id = int.Parse(uutinen.Element("id").Value),
Otsikko = uutinen.Element("otsikko").Value,
Pvm = DateTime.Parse(uutinen.Element("pvm").Value, new CultureInfo("fi-FI")),
Linkki = uutinen.Element("linkki").Value,
Kuva = uutinen.Element("kuva").Value
}).ToList();
temp = temp.OrderByDescending(p => p.Pvm).ToList();
var model = new UutisetServiceModel(loadContext.Id);
model.Uutiset = new ObservableCollection<Uutinen>();
foreach (var item in temp)
{
model.Uutiset.Add(item);
}
return model;
}
}
}
}
и вот мой код главной страницы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using AgFx;
using System.Threading;
using System.Diagnostics;
namespace AgFxTest {
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
private void btnLoadData_Click(object sender, RoutedEventArgs e)
{
this.DataContext = DataManager.Current.Load<UutisetServiceModel>(int.Parse(tbUutinenId.Text));
}
}
}
вот отладочный вывод для ошибки:
No cache found for AgFxTest.UutisetServiceModel (ID=
2/23/2012 10:59:44 AM: Queuing load for UutisetServiceModel (ID=0)
A first chance exception of type 'System.NullReferenceException' occurred in System.Windows.dll
A first chance exception of type 'System.NullReferenceException' occurred in System.Windows.dll
A first chance exception of type 'System.NullReferenceException' occurred in System.Windows.dll
A first chance exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
The thread 'Storage Thread' (0xe050182) has exited with code 0 (0x0).
A first chance exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
The thread 'General Worker' (0xee403f2) has exited with code 0 (0x0).
The thread '<No Name>' (0x1b71ae2) has exited with code 0 (0x0).
The thread '<No Name>' (0xe39016e) has exited with code 0 (0x0).
The thread '<No Name>' (0xfd003a6) has exited with code 0 (0x0).
The thread '<No Name>' (0xeab03ea) has exited with code 0 (0x0).
The program '[248251222] UI Task: Managed' has exited with code 0 (0x0).