Press ESC to close

Xamarin Web Servis ile Online Veritabanı İşlemleri [ Part 3 ]

Xamarin ile online olarak bulunan veritabanımızda yapacağımız işlemlerde son kısma geldik. Buraya kadar olan kısımda Azure’da bir Mobile App Quickstart projesi oluşturduk. Bu projede SQLite değilde SQL kullanmak için bir veri tabanı oluşturup buraya tablo ekledik. Son partda ise Xamarşn projemizde nasıl veri alı, yollayacağımıza bakıyoruz. Azure‘da oluşturmuş olduğumuz projeye gelerek projenin Xamarin.Forms kısmını indiriyoruz. Eğer üzerinde çalışmış olduğunuz projeyi veritabanına bağlamak istiyorsanız Azure size adım adım nasıl yapılacağını anlatıyor.Projeyi indirip açtığımızda Constants, TodoItem, TodoItemManager gibi yapılar karşımıza çıkıyor. İlk olarak Constanstdan başlamak istiyorum. Bu sınıfta bir adres bulunmakta. Biz verilerimizi bu adresten çekip, bu adrese kaydedeceğiz. Hatırlıyorsanız 2. kısımda web servisimizi publish ettiğimiz URL de aynı URL’di.

public static class Constants
	{
		// Replace strings with your Azure Mobile App endpoint.
		public static string ApplicationURL = @"https://sezeromer.azurewebsites.net";
	}

TodoItem sınıfına baktığımız zaman id,name, done gibi değişkenler görüyoruz. Biz bu sınıfta veri tabanımızda bulunan tablolarda ki sütunları almaya çalışacağız. Veri tabanımızda bulunan her tablo için ayrı bir sınıf oluşturup bu sınıflarda tablolardaki sütunların her biri için ayrı değişken oluşturmamız gerekiyor. Json ile verilerimizi alabiliyoruz.

public class TodoItem
	{
		string id;
		string name;
		bool done;

		[JsonProperty(PropertyName = "id")]
		public string Id
		{
			get { return id; }
			set { id = value;}
		}

		[JsonProperty(PropertyName = "text")]
		public string Name
		{
			get { return name; }
			set { name = value;}
		}

		[JsonProperty(PropertyName = "complete")]
		public bool Done
		{
			get { return done; }
			set { done = value;}
		}

        [Version]
        public string Version { get; set; }
	}

Son olarak TodoItemManager sınıfına bakıyoruz. Bu sınıfta verileri almaya ve verileri kaydetmeye yarayan fonksiyonlar mevcut. Burada sadece verileri çekme ve kaydetme fonksiyonlarını görüyorsunuz. Silme ve güncelleme işlemlerini çok rahat bir şekilde kendiniz yapabilirsiniz.

public partial class TodoItemManager
    {
        static TodoItemManager defaultInstance = new TodoItemManager();
        MobileServiceClient client;

#if OFFLINE_SYNC_ENABLED
        IMobileServiceSyncTable<TodoItem> todoTable;
#else
        IMobileServiceTable<TodoItem> todoTable;
#endif

        const string offlineDbPath = @"localstore.db";

        private TodoItemManager()
        {
            this.client = new MobileServiceClient(Constants.ApplicationURL);

#if OFFLINE_SYNC_ENABLED
            var store = new MobileServiceSQLiteStore(offlineDbPath);
            store.DefineTable<TodoItem>();

            //Initializes the SyncContext using the default IMobileServiceSyncHandler.
            this.client.SyncContext.InitializeAsync(store);

            this.todoTable = client.GetSyncTable<TodoItem>();
#else
            this.todoTable = client.GetTable<TodoItem>();
#endif
        }

        public static TodoItemManager DefaultManager
        {
            get
            {
                return defaultInstance;
            }
            private set
            {
                defaultInstance = value;
            }
        }

        public MobileServiceClient CurrentClient
        {
            get { return client; }
        }

        public bool IsOfflineEnabled
        {
            get { return todoTable is Microsoft.WindowsAzure.MobileServices.Sync.IMobileServiceSyncTable<TodoItem>; }
        }

        public async Task<ObservableCollection<TodoItem>> GetTodoItemsAsync(bool syncItems = false)
        {
            try
            {
#if OFFLINE_SYNC_ENABLED
                if (syncItems)
                {
                    await this.SyncAsync();
                }
#endif
                IEnumerable<TodoItem> items = await todoTable
                    .Where(todoItem => !todoItem.Done)
                    .ToEnumerableAsync();

                return new ObservableCollection<TodoItem>(items);
            }
            catch (MobileServiceInvalidOperationException msioe)
            {
                Debug.WriteLine(@"Invalid sync operation: {0}", msioe.Message);
            }
            catch (Exception e)
            {
                Debug.WriteLine(@"Sync error: {0}", e.Message);
            }
            return null;
        }

        public async Task SaveTaskAsync(TodoItem item)
        {
            if (item.Id == null)
            {
                await todoTable.InsertAsync(item);
            }
            else
            {
                await todoTable.UpdateAsync(item);
            }
        }

Bütün bu işlemlerden sonra verilerinizi mobil uygulamanızda gösterip, kaydedebilirsiniz. Aklınıza takılan bir soru olursa mail veya yorum atarak bana ulaşabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir