Java
Android
Firebase

コピペで使えるFirebase-RealtimeDatabase on Android

More than 1 year has passed since last update.


はじめに

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) {
// データの取得に失敗
}
});