LoginSignup
11
13

More than 5 years have passed since last update.

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

Posted at

はじめに

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

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13