Bryan Albrecht

Realm in Xamarin Forms

In einem anderen Tutorial habe ich bereit erklärt, wie man mit Realm die wichtigsten Funktionen ausführt.
Nun möchte ich zeigen, wie man Realm in Xamarin Forms verwendet.

Vorbereitung

Als erstes sollte man sich das Realm Packet im Xamarin Studio herunterladen. Dieses Packet findet man in der Projektmappe unter Pakete. Dort kann man Pakete hinzufügen und verwalten.
Wenn das Realm Paket hinzugefügt wurde, ist dieses im Ordner Pakete sichtbar.
In jeder Klasse, in welcher mit Realm gearbeitet wird, braucht folgendes "using":

  • using Realms;

Ausgangslage

Das Ziel ist es, das wir ein Applikation haben, welche einen Text einlesen, speichern und verwalten kann. Dazu sollen drei Seiten angelegt werden. Eine Start- eine Einfüge-und eine Verlaufsseite.
Alle Texte, welche gespeichert werden, sollen in die Datenbank geschrieben und wieder daraus gelesen werden.

Startseite

Auf der Startseite soll man den momentan neusten Text, einen Verlaufs- so wie einen Hinzufügen Button finden.

HomeScreen

Beim Klicken auf einer der beiden Buttons soll jeweils eine neue Seite aufgerufen werden.
Der Code der Buttons für diese Seite sieht wie folgt aus:

  1. addButton.Clicked += (sender, e) => {
  2.     MainPage.Navigation.PushAsync(new InsertPage());
  3. };
  4. historyButton.Clicked += (sender, e) => {
  5.     MainPage.Navigation.PushAsync(new HistoryPage());
  6. };
  1. Für das Label, welches mit dem neusten Text abgefüllt werden soll, musste ich folgenden Code schreiben:
  2. MessagingCenter.Subscribe<InsertPage> (this, "dataBus", (sender) => {
  3.     realm = Realm.GetInstance();
  4.     IEnumerable<TextModel> textModelList = realm.All<TextModel>();
  5.     TextModel textModel = textModelList.Last();
  6.     textLabel2.Text = textModel.SavedText;
  7. });

Einfüge Seite

Auf der Einfüge Seite hat man ein Textfeld, in welches man den neuen Text eingeben kann.

AddScreen

Diesen Text kann man dann speichern oder verwerfen.
Der Code für die beiden Buttons sieht wie folgt aus:

  1. public InsertPage ()
  2. {
  3.     InitializeComponent ();
  4.     
  5.     submitButton.Clicked += (sender, e) => {
  6.         SaveData();
  7.         MessagingCenter.Send<InsertPage> (this, "dataBus");
  8.         this.Navigation.PopAsync();
  9.     };
  10.     cancelButton.Clicked += (sender, e) => {
  11.         this.Navigation.PopAsync();
  12.     };
  13. }
  1. private bool SaveData(){
  2.     realm = Realm.GetInstance();
  3.     realm.Write(() =>
  4.         {
  5.             var modelObject = realm.CreateObject<TextModel>();
  6.             modelObject.SavedText =insertTextBox.Text;
  7.         });
  8.     return true;
  9. }

Verlaufsseite

Auf der Verlaufsseite kann der Benutzer alle eingegebenen Texte anschauen und bei Bedarf löschen.

HistoryScreen

Das Löschen des Elements wird direkt auf die Datenbank übertragen. Das heisst, dass die View so wie die Datenbank Zeitgleich aktualisiert werden.
Der Code fürs Abfüllen der Liste sieht wie folgt aus:

  1. Realm realm;
  2. public HistoryPage ()
  3. {
  4.     InitializeComponent ();
  5.     realm = Realm.GetInstance();
  6.     IEnumerable<TextModel> textModelList = realm.All<TextModel>();
  7.     historyList.ItemsSource = textModelList;
  8. }

Wenn ein Element gelöscht werden soll, wird folgender Code aufgerufen:

  1. public void OnDelete (object sender, EventArgs e) {
  2.     var mi = ((MenuItem)sender);
  3.     TextModel textModel = (TextModel)mi.CommandParameter;
  4.     DisplayAlert("Delete Context Action", mi.CommandParameter + " delete context action", "OK");
  5.     using(var transaction = realm.BeginWrite())
  6.     {
  7.         realm.Remove (textModel);
  8.         transaction.Commit();
  9.     }
  10. }