はじめに
Firebaseに触れる大多数の人は「RealtimeDatabase」を使ってみたいからだと思うんですよ。(暴論)
しかし、調べて出て来るのは的外れな記事ばかり。
ちゃんと使うにはある程度検証する必要が出て来るかと思います。もちろん検証がとても大切で、醍醐味なのは理解しています。
ですが、「俺はとりあえず使ってみたいんじゃ!」という内なる獣が暴れそうな方々(もちろん私も含めて)がいますよね。
そういう方のために、できるだけコピペで使えるようにコードをまとめておきます。
「こんなのも理解できないのかよ」「コピペは学習にs(省略」...etcという方々には大変恥ずかしい内容になりますので、どうぞブラウザバックをお願い致します。
データの保存
単体データの保存
まず使わないと思いますが、
例えば文字列「Hello World !」のみを保存したい場合はこんな感じに書きます。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
myRef.setValue("Hello World !");
子データの保存
例えば保存済みデータ「Items」の中に文字列「apple」を保存したい場合はこんな感じに書きます。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Items");
myRef.setValue("apple");
これは.childを使っていくらでも内包することが出来て、
例えば保存済みデータ「Items」の中の文字列「apple」の中に文字列「"甘い"」を保存したい場合はこんな感じに書きます。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Items").child("apple");
myRef.setValue("甘い");
つまりこんなこともできます。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Items").child("1").child("2").child("3").child("4").child("5").child("6").child("7").child("8").child("9").child("10");
myRef.setValue("おつかれ");
Firebaseが優秀なため、もしも親データが無かったら親データもろとも作成してくれます。
カスタムモデルごと保存
なんと自作モデルの保持するデータそのまま保存できます。
書き方はめっちゃ簡単(というかそのまま)で、同じように入れてやるだけです。
Item item=new Item();
item.setName("apple");
item.setTaste("甘い");
item.setPrice(500);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Items").child("apple");
myRef.setValue(item);
これで「Items」の「apple」の中に3つのデータが保存されます。
データの取得
「RealtimeDatabaseの醍醐味はリアルタイムで同期されるところ!」
みなさんコレがしたくてFirebaseしてるんですよね。
安心してください。Firebaseもコレ前提で作られてるので、逆に言うとコレを使わないとデータの取得ができないです。
基本型データの取得
例えば親データ「Items」内のデータが変更された時にデータを取得したいのであればこんな感じに書きます。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference userRef = database.getReference("Items");
userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//インスタンスの取得
for (DataSnapshot data : dataSnapshot.getChildren()) {
Log.d("",data.getValue().toString);
}
}
@Override
public void onCancelled(DatabaseError error) {
// データの取得に失敗
}
});
もし「Items」内に「apple」「pen」「gorilla」が保存されていたら、dataSnapshot.getChildren()のsizeが3となり、
apple
pen
gorilla
というログが出るはずです。
カスタムモデルデータの取得
例えば上記のカスタムモデルが保存されていたとしたら、こんな感じに書きます。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference userRef = database.getReference("Items");
userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//インスタンスの取得
for (DataSnapshot data : dataSnapshot.getChildren()) {
Item item=data.getValue(Item.class);
}
}
@Override
public void onCancelled(DatabaseError error) {
// データの取得に失敗
}
});