Исключение MoveNext() после вставки данных из WP8 в базу данных Azure (мобильные службы)

У меня вопрос связанный с Windows Azure / Windows Phone 8 services

После того, как я нажму кнопку, используйте событие refresh_button_Tap. У меня есть сообщение с MessageBox:

«System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта. at pic.MainPage.d__0.MoveNext()»

Затем я просто нажимаю «ОК», и новая запись появляется в Azure Database.

public class UsersTableItem
    {
        public int Id { get; set; }

        [DataMember(Name = "Login")]
        public string Login { get; set; }

        [DataMember(Name = "Password")]
        public string Password { get; set; }

    }

    public partial class MainPage : PhoneApplicationPage
    {
        // MobileServiceCollectionView implements ICollectionView (useful for databinding to lists) and 
        // is integrated with your Mobile Service to make it easy to bind your data to the ListView
        //private MobileServiceCollectionView<PicturesTableItem> items;

        private IMobileServiceTable<PicturesTableItem> picturesTable = App.MobileService.GetTable<PicturesTableItem>();

        private MobileServiceCollectionView<UsersTableItem> items;

        private IMobileServiceTable<UsersTableItem> usersTable = App.MobileService.GetTable<UsersTableItem>();

        // Constructor
        public MainPage()
        {
            InitializeComponent();

        }

        private async void InsertUsersTableItem(UsersTableItem UsersTableItem)
        {
            // This code inserts a new PicturesTableItem into the database. When the operation completes
            // and Mobile Services has assigned an Id, the item is added to the CollectionView
            try
            {

                await usersTable.InsertAsync(UsersTableItem);
                items.Add(UsersTableItem);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

        private void refresh_button_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            var usersTableItem = new UsersTableItem {Login = "LOL", Password = "9E32581C5C0D680FFC7D95C370D3260B" };
            InsertUsersTableItem(usersTableItem);
        }
    }

Azure SQL

USE [pic_db]
GO

/**** Object:  Table [pic].[UsersTableItem]    Script Date: 2013-02-19 22:02:47 ****/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [pic].[UsersTableItem](
       [Id] [int] IDENTITY(1,1) NOT NULL,
       [Login] [nvarchar](max) NOT NULL,
       [Password] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_UsersTableItem] PRIMARY KEY CLUSTERED
(
       [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

GO

Как это решить?


person boski    schedule 19.02.2013    source источник
comment
У вас установлено Microsoft.CompilerServices.AsyncTargetingPack?   -  person Stephen Cleary    schedule 20.02.2013
comment
Я использую VS 2012, но получил сообщение от NUGET. Microsoft.CompilerServices.AsyncTargetingPack не может быть установлен, поскольку он несовместим ни с одним проектом в решении. Проверьте .NETFramework, версия = v4.0 Проверьте .NETFramework, версия = v4.5 Silverlight, версия = v5.0   -  person boski    schedule 20.02.2013


Ответы (2)


Из вашего кода я не вижу, чтобы вы инициализировали коллекцию items, поэтому виновником может быть items.Add(UsersTableItem);, и это происходит после InsertAsync, поэтому ваши данные действительно поступают в базу данных очень хорошо.

person Jim O'Neil    schedule 20.02.2013
comment
Да, это одна часть проблемы. Мой код взят из примера Azure TodoItem. Я удаляю часть private void RefreshTodoItems(){ items = UsersTableItem.ToCollectionView(); } - person boski; 20.02.2013

Прежде всего, спасибо Джиму О'Нилу.

Но есть еще кое-что. Это проблема с сетевым подключением от Hyper-V и моего Wi-Fi. Мой эмулятор Hyper-V подключается к Интернету с задержкой в ​​1 минуту. Сначала приложение просто запускается и через некоторое время синхронизирует часы. Но до сих пор нет связи. Через одну минуту соединение действительно доступно.

из-за: связанной темы

Сегодня я снова загружаю образец проекта TodoItems из своей Azure. И они используют что-то подобное для инициализации коллекции items.

private void RefreshTodoItems()
        {
            // This code refreshes the entries in the list view be querying the TodoItems table.
            // REMOVED the filter on completed items, so they're all dislpayed
            items = todoTable
                //.Where(todoItem => todoItem.Complete == false)
                .ToCollectionView();
            ListItems.ItemsSource = items;
        }

protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            RefreshTodoItems();
        }

RefreshTodoItems не будет работать правильно, если эмулятор не может подключиться. Так что моя проблема возникает и с тестовым образцом проекта из Azure. Я не единственный, у кого возникла проблема с эмулятором Wifi / Hyper-V. Я должен купить устройство с Windows Phone 8, или Microsoft должна решить эту проблему.

person boski    schedule 20.02.2013