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

#はじめに
Firebaseに触れる大多数の人は「**RealtimeDatabase**」を使ってみたいからだと思うんですよ。(暴論)

しかし、調べて出て来るのは~~的外れな~~記事ばかり。
ちゃんと使うにはある程度検証する必要が出て来るかと思います。もちろん検証がとても大切で、醍醐味なのは理解しています。

ですが、「**俺はとりあえず使ってみたいんじゃ！**」という内なる獣が暴れそうな方々(もちろん私も含めて)がいますよね。

そういう方のために、できるだけコピペで使えるようにコードをまとめておきます。

**「こんなのも理解できないのかよ」「コピペは学習にs(省略」...etcという方々には大変恥ずかしい内容になりますので、どうぞブラウザバックをお願い致します。**

#データの保存
###単体データの保存
まず使わないと思いますが、
例えば文字列「**Hello World !**」のみを保存したい場合はこんな感じに書きます。

```java
FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference(); 
myRef.setValue("Hello World !"); 
```

###子データの保存
例えば保存済みデータ「**Items**」の中に文字列「**apple**」を保存したい場合はこんな感じに書きます。

```java
FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("Items");
myRef.setValue("apple"); 
```

これは**.child**を使っていくらでも内包することが出来て、
例えば保存済みデータ「**Items**」の中の文字列「**apple**」の中に文字列「**"甘い"**」を保存したい場合はこんな感じに書きます。

```java
FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("Items").child("apple"); 
myRef.setValue("甘い"); 
```

つまりこんなこともできます。

```java
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が優秀なため、もしも**親データが無かったら親データもろとも作成**してくれます。

###カスタムモデルごと保存
なんと自作モデルの保持するデータそのまま保存できます。
書き方は**めっちゃ簡単**(というかそのまま)で、同じように入れてやるだけです。

```java
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**」の中に３つのデータが保存されます。

#データの取得
「**RealtimeDatabaseの醍醐味はリアルタイムで同期されるところ！**」
~~みなさんコレがしたくてFirebaseしてるんですよね。~~
安心してください。Firebaseもコレ前提で作られてるので、逆に言うとコレを使わないとデータの取得ができないです。

###基本型データの取得

例えば親データ「**Items**」内のデータが変更された時にデータを取得したいのであればこんな感じに書きます。

```java

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**が３となり、
apple
pen
gorilla
というログが出るはずです。

###カスタムモデルデータの取得

例えば上記のカスタムモデルが保存されていたとしたら、こんな感じに書きます。

```java

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

```