Open Naomath opened 7 years ago
ちなみに、FirebaseのDatabaseの画面のスクショ貼れる??
まず、
public void down_load_time(){
//ダウンロードの時の処理
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference reference = database.getReference("group");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//変更された時
GenericTypeIndicator<ArrayList<GroupTwoWords>> indicator = new GenericTypeIndicator<ArrayList<GroupTwoWords>>() {};
GroupTwoWords groupTwoWords= dataSnapshot.getValue(GroupTwoWords.class);
adapter.add(groupTwoWords);
}
ここのonDataChange()
の中身だけど、DataSnapshot
型で取れるデータは、Firebaseの特定の枝(ここわかる??)に保存されているデータをまるごと持ってきてるのね。
なので、ここからGroupTwoWords
型のデータに合うように、dataSnapshot
という引数から子要素を取得する必要がある。
public void onDataChange(DataSnapshot dataSnapshot) {
//変更された時
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
GroupTwoWords groupTwoWords = snapshot.getValue(GroupTwoWords.class);
}
ここの時点の引数はそれぞれ、
dataSnapshot
: FirebaseDatabaseから持ってきたデータまるごとsnapshot
: dataSnapshot
から取得したGroupTwoWords
型のデータdataSnapshot
から、getChildren()
メソッドでsnapshot
を取得してる。
ここのfor
文では、「拡張for
文」というのを用いたよ
https://www.javadrive.jp/start/for/index8.html
DataSnapshot
クラスのドキュメントhttps://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot 使えるメソッドとか、使い方が書いてあるよ(英語だけど...)
ものすごく簡単に図にしてみた
いま、User "Gami0001"のデータをダウンロードしてきたとして、dataSnapshot
に入っているのは上の青い部分。そこをfor
文で一つひとつ取得して、snapshot
に入れていく。それが上の赤い部分。
※「ダウンロード(download)」ではなく「フェッチ(fetch)」がよく使われるので覚えておくといいよ
ありがとうございます!!!!!! めっちゃわかりやすいです!! やってみます
Firebaseのデータベース構造・データベースデザインは、これが参考になるから見てみて。 http://gihyo.jp/dev/serial/01/firebase Firebaseで採用されているデータベースは、JSONを用いたNoSQLなんだよ。(難しいね笑) https://academy.gmocloud.com/qa/20160509/2284
あと9月に入ってからでいいけど、この辺を見ておくとデータベースの理解が早まるよ
あざす
ListActivityの87のgroupTwoWordsがnullになってる