C#でFirebaseを使ってみよう!(3) Databaseを使ってみる
あすかです。
前回は、ストレージでファイヤー!してみました。
今回は、データベースでファイヤー!してみます。
nugetからパッケージをとってきます。
Databaseでもファイヤー!する
FirebaseのDatabaseのほうはStorageより有名みたいで、あちこちにドキュメントがたくさん転がってます。
こんな誰が書いたのかわからないようなブログの記事なんて読まないでさっさとさてデータベース使ってみますか!
こっちでもやっぱり参照?
はい、ストレージと同様に参照が必要です。
ただし、一つ言っちゃうと、データベースの場合は参照ではなくクエリと呼ばれます。
どうして参照ではなくクエリと呼ばれるのか?
そのわけを知っちゃうと、きっと感動しますよ!次回になると思いますが!イヒー
データ格納の考え方
ここまできておいて何ですが、FirebaseのDatabase構造について簡単に説明します。
Databaseというと、テーブルだとかカラムだとか、そういうことを考えてめんどそうになる方もおられると思います。
FirebaseのDatabaseは、データをツリー形状で管理します。
このやり方の利点は、ツリー形状をそのままJSON、果てはC#のクラスまで、直感的に展開できることです。
さいわい、今回利用するFirebaseDatabase.netは、Json.NETと自動的に連携して、Databaseにアップロードしたデータを、そのままC#のクラスに変換して直接返してくれます!
あと、もう1つ。
Databaseというと、SELECT * from...で始まる、なんだかとーってもわけのわかんないめんどいSQL文を思い出して厭になる方もいらしてると思いますが(私です)
安心してください、FirebaseのDatabaseはNoSQLといいます。
ええっ、SQLがなければデータベースじゃないでしょ?と思ってるそこのあなた。
MySQLとかのデータベースをSQL文1つで操作するならば、
NoSQLは(少なくともFirebaseは)、メソッドを通して操作します。
ちなみに、Json.NETの制約なのかもしれませんが、
文字列や数字などをそのまま、直接Databaseに格納することはできないです。
なので、今回は文字列でテストしたいので、文字列だけを持ったクラスを作ってみます。
具体的なやり方はおいおい見ていくとして、まずはコードを見てみましょう。
データを格納する
tryで囲まれている部分だけ読めば、「sample/path(例)」というパスからクエリをとってきて、PostAsyncでデータを格納するだけです。
ね、簡単でしょう?
しかし、どうしても理解しなければいけない注意点が1つあります。
それは、イメージとしては「sample/path」というパスにデータを格納したつもりでしょうが、
実は、配列の最後にデータを追加しているに過ぎないのです。
試しに、同じデータを連打してPostAsyncしてから、「sample/path」をFirebaseのコンソール画面から見てみましょう。
「sample/path」直下にデータがあると思ったら、変な文字列が並んでいますね。
それぞれ展開してみますと。
データが見えてきます。
大体イメージは掴めましたか?
これじゃどうやってデータを取り出すんだ!と気になりますね。
大丈夫です、対応するメソッドがちゃんとあります。
データを取得する
データを配列の末端にプッシュするなら、データを配列ごと取り出すメソッドもちゃんとあります。
Onceです。Onceは、配列を返します。Onceなのに配列です。はい。
Onceで返されるのは、DatabaseDataクラスの配列ではなく、FirebaseObject<DatabaseData>という型の配列です。
FirebaseObjectからDatabaseDataを抜き出すためには、Objectプロパティを参照します。
今回は、LinqのSelectメソッドを使って、FirebaseObject<DatabaseData>型の配列を、DatabaseData型の配列になおしてから扱っています。
一番最初のデータを画面に表示してます。
ちなみに、これ書いてる瞬間地震きました。