Delpin Susai Raj Tuesday, 29 January 2019

Xamarin.Forms - Working with Firebase Storage CRUD Operations

In this blog post, you will learn how to Upload, Download and Delete file using Firebase Storage in Xamarin.Forms.


Introduction

Xamarin.Forms - Working With Firebase Realtime Database CRUD Operations



Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.

Firebase

Firebase gives you functionality like analytics, databases, messaging and crash reporting so you can move quickly and focus on your users.



Firebase is a backend platform for building Web, Android, and iOS applications. It offers real-time database, different APIs, multiple authentication types and hosting platform. This is an introductory tutorial, which covers the basics of the Firebase platform and explains how to deal with its various components and sub-components.

Build apps with Firebase
  • Real-time Database
  • Storage
  • Notifications
  • Authentication
  • Hosting
Prerequisites
  • Visual Studio 2017 or Later(Windows or Mac)
  • Setting up a Xamarin.Forms Project
Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.or download the source here
https://github.com/susairajs/Xamarin-Firebase-Storage

Visual Studio 2019 has more options in the opening window. Clone or check out the code from any repository or, open a project or solution for your computer.

Now, you need to click "Create a new project".


Now, filter by Project Type: Mobile
Choose the Mobile App (Xamarin. forms) project under C# and Mobile.


Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".


Now, select the blank app and target platforms - Android, iOS and Windows (UWP).


Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select XAML page and double-click to open the MainPage.Xaml page.

You now have a basic Xamarin.Forms app. Click the Play button to try it out.


Create a project in Firebase

In this step, create a project in Firebase. Go to the following link.

https://console.firebase.google.com/

Click "Add Project".


Now, Give the project name and select your country then Read the terms. Afterward, click "Create project".



Now, your project is ready, click continue.


In this step Choose Storage under the Project Overview.



Now, you will change the following Storage Rules Afterward, click "Publish".

service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth == null;
}
}
}
view raw Firebase.xml hosted with ❤ by GitHub

Now, your Firebase Storage ready. you can use your Storage API URI here.


Setting up the User Interface

Go to MainPage.Xaml and write the following code.

MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinFirebase"
x:Class="XamarinFirebase.MainPage">
<StackLayout>
<StackLayout>
<StackLayout HorizontalOptions="Center" VerticalOptions="Start">
<Image x:Name="imgBanner" Source="banner.png" ></Image>
<Image Margin="0,0,0,10" HeightRequest="100" Source="firebase.png" ></Image>
<Label Margin="0,0,0,10" Text="Firebase Storage" FontAttributes="Bold" FontSize="Large" TextColor="Gray" HorizontalTextAlignment="Center" ></Label>
<Image x:Name="imgChoosed" HeightRequest="150"></Image>
<Entry x:Name="txtFileName" Placeholder="Enter FileName"></Entry>
<StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
<Button x:Name="btnPick" WidthRequest="200" Text="Pick" Clicked="BtnPick_Clicked"/>
<Button x:Name="btnUpload" WidthRequest="200" Text="Upload" Clicked="BtnUpload_Clicked" />
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
<Button x:Name="btnDownload" WidthRequest="200" Text="Download" Clicked="BtnDownload_Clicked" />
<Button x:Name="btnDelete" WidthRequest="200" Text="Delete" Clicked="BtnDelete_Clicked" />
</StackLayout>
<Label x:Name="lblPath"></Label>
</StackLayout>
</StackLayout>
</StackLayout>
</ContentPage>
view raw MainPage.xaml hosted with ❤ by GitHub

Click the Play button to try it out.



NuGet Packages

Now, add the following NuGet Packages.


  • Xam.Plugin.Media
  • Firebase.Storage


Add FirebaseDatabase.net NuGet

Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "FirebaseDatabase.net" and add Package. Remember to install it for each project (.NET Standard, Android, iO, and UWP).




Connect Firebase

Now, Write the following code Connect your Firebase Storage

using Firebase.Storage;
FirebaseStorage firebaseStorage = new FirebaseStorage("xamarinfirebase-****.appspot.com");

Upload

Now, write the code to upload file to Firebase Storage.

FirebaseStorageHelper.cs

public async Task<string> UploadFile(Stream fileStream,string fileName)
{
var imageUrl = await firebaseStorage
.Child("XamarinMonkeys")
.Child(fileName)
.PutAsync(fileStream);
return imageUrl;
}
MainPage.Xaml.cs

FirebaseStorageHelper firebaseStorageHelper = new FirebaseStorageHelper();
MediaFile file;
public MainPage()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
}
private async void BtnPick_Clicked(object sender, EventArgs e)
{
await CrossMedia.Current.Initialize();
try
{
file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
{
PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium
});
if (file == null)
return;
imgChoosed.Source = ImageSource.FromStream(() =>
{
var imageStram = file.GetStream();
return imageStram;
});
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private async void BtnUpload_Clicked(object sender, EventArgs e)
{
await firebaseStorageHelper.UploadFile(file.GetStream(), Path.GetFileName(file.Path));
}
Click the Play button to try it out.





Download

Now, write the following code to download file from firebase Storage.

public async Task<string> GetFile(string fileName)
{
return await firebaseStorage
.Child("XamarinMonkeys")
.Child(fileName)
.GetDownloadUrlAsync();
}
private async void BtnDownload_Clicked(object sender, EventArgs e)
{
string path = await firebaseStorageHelper.GetFile(txtFileName.Text);
if (path != null)
{
lblPath.Text = path;
await DisplayAlert("Success", path, "OK");
}
}
Click the Play button to try it out.



Delete

Now, write the following code to Delete file from firebase storage.

public async Task DeleteFile(string fileName)
{
await firebaseStorage
.Child("XamarinMonkeys")
.Child(fileName)
.DeleteAsync();
}
private async void BtnDelete_Clicked(object sender, EventArgs e)
{
await firebaseStorageHelper.DeleteFile(txtFileName.Text);
lblPath.Text = string.Empty;
await DisplayAlert("Success", "Deleted", "OK");
}
Click the Play button to try it out.





Full code

FirebaseStorageHelper.cs

using System.Threading.Tasks;
using Firebase.Storage;
namespace XamarinFirebase.Helper
{
public class FirebaseStorageHelper
{
FirebaseStorage firebaseStorage = new FirebaseStorage("xamarinfirebase-****.appspot.com");
public async Task<string> UploadFile(Stream fileStream,string fileName)
{
var imageUrl = await firebaseStorage
.Child("XamarinMonkeys")
.Child(fileName)
.PutAsync(fileStream);
return imageUrl;
}
public async Task<string> GetFile(string fileName)
{
return await firebaseStorage
.Child("XamarinMonkeys")
.Child(fileName)
.GetDownloadUrlAsync();
}
public async Task DeleteFile(string fileName)
{
await firebaseStorage
.Child("XamarinMonkeys")
.Child(fileName)
.DeleteAsync();
}
}
}

MainPage.Xaml.cs

using XamarinFirebase.Helper;
using XamarinFirebase.Model;
using Plugin.Media;
using Plugin.Media.Abstractions;
using System.Diagnostics;
using System.IO;
namespace XamarinFirebase
{
public partial class MainPage : ContentPage
{
FirebaseStorageHelper firebaseStorageHelper = new FirebaseStorageHelper();
MediaFile file;
public MainPage()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
}
private async void BtnPick_Clicked(object sender, EventArgs e)
{
await CrossMedia.Current.Initialize();
try
{
file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
{
PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium
});
if (file == null)
return;
imgChoosed.Source = ImageSource.FromStream(() =>
{
var imageStram = file.GetStream();
return imageStram;
});
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private async void BtnUpload_Clicked(object sender, EventArgs e)
{
await firebaseStorageHelper.UploadFile(file.GetStream(), Path.GetFileName(file.Path));
}
private async void BtnDelete_Clicked(object sender, EventArgs e)
{
await firebaseStorageHelper.DeleteFile(txtFileName.Text);
lblPath.Text = string.Empty;
await DisplayAlert("Success", "Deleted", "OK");
}
private async void BtnDownload_Clicked(object sender, EventArgs e)
{
string path = await firebaseStorageHelper.GetFile(txtFileName.Text);
if (path != null)
{
lblPath.Text = path;
await DisplayAlert("Success", path, "OK");
}
}
}
}

I hope you have understood, how to Upload, Download and Delete file using Firebase Storage in Xamarin.Forms. Thanks for reading. Please share your comments and feedback.

Happy Coding :)
Delpin Susai Raj Monday, 28 January 2019

Xamarin.Forms - Bing News Search Using Cognitive Service

In this blog post, you will learn how to Search News using Bing Search API using Cognitive Service in Xamarin forms.

Introduction





Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.

Cognitive Services


Xamarin and Cognitive Services together can infuse your apps, websites, and bots with intelligent algorithms to see, hear, speak, understand and interpret your user needs through natural methods of communication. Also, they help you transform your business with AI today.

Use AI to solve business problems
  • Vision
  • Speech
  • Knowledge
  • Search
  • Language
Bing News Search API
  1. Bing News Search API provides an experience similar to Bing News.
  2. Bing News Search API lets you send a search query to Bing and get back a list of relevant News from the Bing News Search API.
Prerequisites
  • Visual Studio 2017 or Later(Windows or Mac)
  • Bing Search API Key
Setting up a Xamarin.Forms Project

Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.

Visual Studio 2019 has more options in the opening window. Clone or check out the code from any repository or, open a project or solution for your computer.

Now, you need to click "Create a new project".


Now, filter by Project Type: Mobile
Choose the Mobile App (Xamarin. forms) project under C# and Mobile.


Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".


Now, select the blank app and target platforms - Android, iOS and Windows (UWP).


Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select XAML page and double-click to open the MainPage.Xaml page.

You now have a basic Xamarin.Forms app. Click the Play button to try it out.


Get Bing Search API Key

In this step, get Bing Search API Key. Go to the following link.

https://azure.microsoft.com/en-in/services/cognitive-services/

Click "Try Cognitive Services for free".


Now, you can choose Bing Search APIs under Search APIs. Afterward, click "Get API Key".



Read the terms, and select your country/region. Afterward, click "Next".


Now, log in using your preferred account.



Now, the API key is activated. You can use it now.



Note
The trial key is available only for 7 days.

Setting up the User Interface

Go to MainPage.Xaml and write the following code.

MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinCognitive"
x:Class="XamarinCognitive.MainPage">
<StackLayout>
<StackLayout>
<StackLayout HorizontalOptions="Center" VerticalOptions="Start">
<Image x:Name="imgBanner" Source="banner.png" ></Image>
<Image Margin="0,0,0,10" x:Name="imgCognitive" HeightRequest="100" Source="cognitiveservice.png" ></Image>
<Label Margin="0,0,0,10" Text="Bing News Search" FontAttributes="Bold" FontSize="Large" TextColor="Gray" HorizontalTextAlignment="Center" ></Label>
<Entry x:Name="txtSearch" Placeholder="Type here.."></Entry>
<Button x:Name="btnSearch" WidthRequest="50" Text="Search" Clicked="BtnSearch_Clicked" />
<StackLayout HorizontalOptions="CenterAndExpand" Margin="10,0,0,10">
<ListView x:Name="listNews">
</ListView>
</StackLayout>
</StackLayout>
</StackLayout>
</StackLayout>
</ContentPage>
view raw MainPage.xaml hosted with ❤ by GitHub
Click the play button to try it out.



NuGet Packages

Now, add the following NuGet Packages.
  • Newtonsoft.Json
Add Newtonsoft.Json NuGet

Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "Newtonsoft.Json" and add Package. Remember to install it for each project (.NET Standard, Android, iO, and UWP).

Create a Model

In this step, you can create a model for Deserializing your response.

ResponseModel.cs

using System;
using System.Collections.Generic;
using System.Text;
namespace XamarinCognitive
{
public class ResponseModel
{
public string _type { get; set; }
public string readLink { get; set; }
public QueryContext queryContext { get; set; }
public int totalEstimatedMatches { get; set; }
public List<Sort> sort { get; set; }
public List<Value> value { get; set; }
}
public class QueryContext
{
public string originalQuery { get; set; }
public bool adultIntent { get; set; }
}
public class Sort
{
public string name { get; set; }
public string id { get; set; }
public bool isSelected { get; set; }
public string url { get; set; }
}
public class Thumbnail
{
public string contentUrl { get; set; }
public int width { get; set; }
public int height { get; set; }
}
public class Image
{
public Thumbnail thumbnail { get; set; }
}
public class About
{
public string readLink { get; set; }
public string name { get; set; }
}
public class Provider
{
public string _type { get; set; }
public string name { get; set; }
}
public class Value
{
public string name { get; set; }
public string url { get; set; }
public Image image { get; set; }
public string description { get; set; }
public List<About> about { get; set; }
public List<Provider> provider { get; set; }
public DateTime datePublished { get; set; }
public string category { get; set; }
}
}
Bing Image Search

In this step, write the following code for Bing News Search.

MainPage.xaml.cs

using Xamarin.Forms;
using Newtonsoft.Json;
namespace XamarinCognitive
{
public partial class MainPage : ContentPage
{
public static string APIKey = "d9196daefdd64a******849a759ba8861";
public static string baseURl = "https://api.cognitive.microsoft.com/bing/v7.0/news/search";
struct SearchResult
{
public String jsonResult;
public Dictionary<String, String> relevantHeaders;
}
List<string> newsList = new List<string>();
public MainPage()
{
InitializeComponent();
}
private void BtnSearch_Clicked(object sender, EventArgs e)
{
SearchResult bingResult = BingNewsSearch(txtSearch.Text);
var res = JsonConvert.DeserializeObject<ResponseModel>(bingResult.jsonResult);
for (int i = 0; i < res.value.Count; i++)
{
newsList.Add(res.value[i].name);
}
listNews.ItemsSource = newsList;
}
//Bing News Search
static SearchResult BingNewsSearch(string searchQuery)
{
var uriQuery = baseURl + "?q=" + Uri.EscapeDataString(searchQuery);
WebRequest request = HttpWebRequest.Create(uriQuery);
request.Headers["Ocp-Apim-Subscription-Key"] = APIKey;
HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result;
string json = new StreamReader(response.GetResponseStream()).ReadToEnd();
var searchResult = new SearchResult();
searchResult.jsonResult = json;
searchResult.relevantHeaders = new Dictionary<String, String>();
foreach (String header in response.Headers)
{
if (header.StartsWith("BingAPIs-") || header.StartsWith("X-MSEdge-"))
searchResult.relevantHeaders[header] = response.Headers[header];
}
return searchResult;
}
}
}
Click the Play button to try it out.



I hope you have understood how to Search news using the Bing Search API using Cognitive Service Bing Search API in Xamarin.Forms.

Thanks for reading. Please share comments and feedback. Happy Coding :)

Delpin Susai Raj Wednesday, 23 January 2019

Xamarin.Forms - Working with Firebase Realtime Database CRUD Operations

In this blog post, you will learn how to use Firebase Realtime Database with CRUD Operations in Xamarin.Forms.



Introduction




Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.

Firebase

Firebase gives you functionality like analytics, databases, messaging and crash reporting so you can move quickly and focus on your users.



Firebase is a backend platform for building Web, Android, and iOS applications. It offers real-time database, different APIs, multiple authentication types and hosting platform. This is an introductory tutorial, which covers the basics of the Firebase platform and explains how to deal with its various components and sub-components.

Build apps with Firebase
  • Real-time Database
  • Storage
  • Notifications
  • Authentication
  • Hosting
Prerequisites
  • Visual Studio 2017 or Later(Windows or Mac)
Setting up a Xamarin.Forms Project

Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.or download source here

https://github.com/susairajs/Xamarin-Firebase-RealtimeDatabase

Visual Studio 2019 has more options in the opening window. Clone or check out the code from any repository or, open a project or solution for your computer.

Now, you need to click "Create a new project".


Now, filter by Project Type: Mobile

Choose the Mobile App (Xamarin. forms) project under C# and Mobile.


Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".


Now, select the blank app and target platforms - Android, iOS and Windows (UWP).


Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select XAML page and double-click to open the MainPage.Xaml page.


You now have a basic Xamarin.Forms app. Click the Play button to try it out.

Create a project in Firebase

In this step, create a project in Firebase. Go to the following link.

https://console.firebase.google.com/

Click "Add Project".


Now, Give the project name and select your country then Read the terms. Afterward, click "Create project".


Now, your project is ready, click continue.


In this step Choose Database under the Project Overview. Now click to Create the database.


In this step, give read and write rules.

{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
".read": "auth==null",
".write":"auth==null"
}
}
view raw Rules.xml hosted with ❤ by GitHub



Now, your Firebase Realtime Database ready. you can use your database api uri here.



Setting up the User Interface

Go to MainPage.Xaml and write the following code.

MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinFirebase"
x:Class="XamarinFirebase.MainPage">
<StackLayout>
<StackLayout>
<StackLayout HorizontalOptions="Center" VerticalOptions="Start">
<Image x:Name="imgBanner" Source="banner.png" ></Image>
<Image Margin="0,0,0,10" HeightRequest="100" Source="firebase.png" ></Image>
<Label Margin="0,0,0,10" Text="Firebase Realtime Database" FontAttributes="Bold" FontSize="Large" TextColor="Gray" HorizontalTextAlignment="Center" ></Label>
<Entry x:Name="txtId" Placeholder="ID"></Entry>
<Entry x:Name="txtName" Placeholder="Enter Name"></Entry>
<StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
<Button x:Name="btnAdd" WidthRequest="200" Text="Add" Clicked="BtnAdd_Clicked"/>
<Button x:Name="btnRetrive" WidthRequest="200" Text="Retrive" Clicked="BtnRetrive_Clicked"/>
</StackLayout>
<StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
<Button x:Name="btnUpdate" WidthRequest="200" Text="Update" Clicked="BtnUpdate_Clicked" />
<Button x:Name="btnDelete" WidthRequest="200" Text="Delete" Clicked="BtnDelete_Clicked" />
</StackLayout>
<ListView x:Name="lstPersons">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}"></TextCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</StackLayout>
</StackLayout>
</ContentPage>
view raw MainPage.xaml hosted with ❤ by GitHub
Click the Play button to try it out.



NuGet Packages

Now, add the following NuGet Packages.
  • FirebaseDatabase.net
Add FirebaseDatabase.net NuGet

Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "FirebaseDatabase.net" and add Package. Remember to install it for each project (.NET Standard, Android, iO, and UWP).



Create a Model

In this step, you can create a model for deserializing your response.

Person.cs

namespace XamarinFirebase.Model
{
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}
}
view raw Person.cs hosted with ❤ by GitHub
Connect Firebase

Now, Write the following code Connect your Firebase Realtime Database

using Firebase.Database;
using Firebase.Database.Query;
FirebaseClient firebase = new FirebaseClient("https://xamarinfirebase-xxxxx.firebaseio.com/");
Read All

Now, write the code to read all data from Firebase Realtime Database.

FirebaseHelper.cs

public async Task<List<Person>> GetAllPersons()
{
return (await firebase
.Child("Persons")
.OnceAsync<Person>()).Select(item => new Person
{
Name = item.Object.Name,
PersonId = item.Object.PersonId
}).ToList();
}
MainPage.Xaml.cs

FirebaseHelper firebaseHelper = new FirebaseHelper();
public MainPage()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
Click the Play button to try it out.



Insert

Now, write the following code to insert data into Firebase Realtime Database.

public async Task AddPerson(int personId,string name)
{
await firebase
.Child("Persons")
.PostAsync(new Person() { PersonId=personId, Name = name });
}
private async void BtnAdd_Clicked(object sender, EventArgs e)
{
await firebaseHelper.AddPerson(Convert.ToInt32(txtId.Text), txtName.Text);
txtId.Text = string.Empty;
txtName.Text = string.Empty;
await DisplayAlert("Success", "Person Added Successfully", "OK");
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
Click the Play button to try it out.




Read

Now, write the following code to read data from Firebase Realtime Database.

public async Task<Person> GetPerson(int personId)
{
var allPersons = await GetAllPersons();
await firebase
.Child("Persons")
.OnceAsync<Person>();
return allPersons.Where(a => a.PersonId == personId).FirstOrDefault();
}
private async void BtnRetrive_Clicked(object sender, EventArgs e)
{
var person = await firebaseHelper.GetPerson(Convert.ToInt32(txtId.Text));
if(person!=null)
{
txtId.Text = person.PersonId.ToString();
txtName.Text = person.Name;
await DisplayAlert("Success", "Person Retrive Successfully", "OK");
}
else
{
await DisplayAlert("Success", "No Person Available", "OK");
}
}
Click the Play button to try it out.




Update

Now, write the following code to update data to Firebase Realtime Database.

public async Task UpdatePerson(int personId, string name)
{
var toUpdatePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
await firebase
.Child("Persons")
.Child(toUpdatePerson.Key)
.PutAsync(new Person() { PersonId = personId, Name = name });
}
private async void BtnUpdate_Clicked(object sender, EventArgs e)
{
await firebaseHelper.UpdatePerson(Convert.ToInt32(txtId.Text), txtName.Text);
txtId.Text = string.Empty;
txtName.Text = string.Empty;
await DisplayAlert("Success", "Person Updated Successfully", "OK");
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
Click the Play button to try it out.




Delete

Now, write the following code to delete data from Firebase Realtime Database.

public async Task DeletePerson(int personId)
{
var toDeletePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
}
private async void BtnDelete_Clicked(object sender, EventArgs e)
{
await firebaseHelper.DeletePerson(Convert.ToInt32(txtId.Text));
await DisplayAlert("Success", "Person Deleted Successfully", "OK");
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
Click the Play button to try it out.




Full code

FirebaseHelper.cs

using XamarinFirebase.Model;
using Firebase.Database;
using Firebase.Database.Query;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace XamarinFirebase.Helper
{
public class FirebaseHelper
{
FirebaseClient firebase = new FirebaseClient("https://xamarinfirebase-909d2.firebaseio.com/");
public async Task<List<Person>> GetAllPersons()
{
return (await firebase
.Child("Persons")
.OnceAsync<Person>()).Select(item => new Person
{
Name = item.Object.Name,
PersonId = item.Object.PersonId
}).ToList();
}
public async Task AddPerson(int personId,string name)
{
await firebase
.Child("Persons")
.PostAsync(new Person() { PersonId=personId, Name = name });
}
public async Task<Person> GetPerson(int personId)
{
var allPersons = await GetAllPersons();
await firebase
.Child("Persons")
.OnceAsync<Person>();
return allPersons.Where(a => a.PersonId == personId).FirstOrDefault();
}
public async Task UpdatePerson(int personId, string name)
{
var toUpdatePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
await firebase
.Child("Persons")
.Child(toUpdatePerson.Key)
.PutAsync(new Person() { PersonId = personId, Name = name });
}
public async Task DeletePerson(int personId)
{
var toDeletePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
}
}
}
MainPage.Xaml.cs

using XamarinFirebase.Helper;
using XamarinFirebase.Model;
namespace XamarinFirebase
{
public partial class MainPage : ContentPage
{
FirebaseHelper firebaseHelper = new FirebaseHelper();
public MainPage()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
private async void BtnAdd_Clicked(object sender, EventArgs e)
{
await firebaseHelper.AddPerson(Convert.ToInt32(txtId.Text), txtName.Text);
txtId.Text = string.Empty;
txtName.Text = string.Empty;
await DisplayAlert("Success", "Person Added Successfully", "OK");
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
private async void BtnRetrive_Clicked(object sender, EventArgs e)
{
var person = await firebaseHelper.GetPerson(Convert.ToInt32(txtId.Text));
if(person!=null)
{
txtId.Text = person.PersonId.ToString();
txtName.Text = person.Name;
await DisplayAlert("Success", "Person Retrive Successfully", "OK");
}
else
{
await DisplayAlert("Success", "No Person Available", "OK");
}
}
private async void BtnUpdate_Clicked(object sender, EventArgs e)
{
await firebaseHelper.UpdatePerson(Convert.ToInt32(txtId.Text), txtName.Text);
txtId.Text = string.Empty;
txtName.Text = string.Empty;
await DisplayAlert("Success", "Person Updated Successfully", "OK");
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
private async void BtnDelete_Clicked(object sender, EventArgs e)
{
await firebaseHelper.DeletePerson(Convert.ToInt32(txtId.Text));
await DisplayAlert("Success", "Person Deleted Successfully", "OK");
var allPersons = await firebaseHelper.GetAllPersons();
lstPersons.ItemsSource = allPersons;
}
}
}
I hope you have understood, how to use Firebase Realtime Database with CRUD Operations in Xamarin.Forms. Thanks for reading. Please share your comments and feedback.

Happy Coding :)