開始之前, 需要先完成Firebase的註冊和AndroidStudio的環境設定
請參考文章
Android - Firebase 註冊
Android - Firebase 專案開發準備工作
Step 1: 新增Firebase 專案
在Firebase首頁中, 點選右上角的「前往控制台」
點擊「新增專案」
Step 2: 將 Firebase 引入 Module
AndroidStudio 中新增Module,再點選Tools -> Firebase
選擇Realtime Database
Connect to Firebase & Select your app
Step 3: 將 Realtime Database 引入 Module
選取「Add the Realtime Database to your app」
引入成功
Step 4:
建立Database資料
回到Firebase網頁, 在左邊欄位中選擇「Database」
在應用程式右方按下「+」, 可新增資料
由於Firebase並不是以傳統關聯式資料庫的表格, 而是以「JSON」的格式來儲存資料. 所以會以JSON的樹狀結構來呈現.
我們以聯絡人的案例來設計資料庫, 在資料名稱中填入「聯絡人/01/name」, 值填入「Nick」, 然後按下「新增」
再新增一位聯絡人資料名稱中填入「02/name」, 值填入「Curry」
JSON Tree(如下圖), 我們也可以利用右邊的設定, 將JSON格式匯出(如下圖紅框)
匯出格式如下
Step 5:
設定安全性
Firebase 預設只有經過驗證過得帳號, 才能讀取/寫入資料.
在此範例中, 我們先將讀寫資料開放, 讓任何對象都可存取.
若在開發產品App階段, 請勿更改預設設定.
選取「規則」TAB, read/write權限原先預設為「auth != null」
在此將read/write接改為「true」後, 按下發佈
Step 6:
取得Firebase資料
回到AndroidStudio, 我們在Layout中增加一個Listview。
在OnCreate中, 設定好ListView和ArrayAdapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class MainActivity extends AppCompatActivity {
ArrayAdapter<String> fileDBAdapter;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
ListView list = (ListView) findViewById(R.id.listView); fileDBAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1); list.setAdapter(fileDBAdapter); } }
|
MainActivity 實現 ChildEventListener及其Function
在onChildAdded和onChildRemoved中, 將資料設定給ArrayAdapter, 使得資料顯示於ListView上
1 2 3 4 5 6 7 8 9 10 11
| @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { fileDBAdapter.add( String.valueOf(dataSnapshot.child("name").getValue())); }
@Override public void onChildRemoved(DataSnapshot dataSnapshot) { fileDBAdapter.remove( String.valueOf(dataSnapshot.child("name").getValue())); }
|
最後在OnCreate中, 設定FirebaseDatabase
1 2 3
| FirebaseDatabase fireDB = FirebaseDatabase.getInstance(); DatabaseReference myRef = fireDB.getReference("聯絡人"); myRef.addChildEventListener(this);
|
執行結果
Source Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| public class MainActivity extends AppCompatActivity implements ChildEventListener {
ArrayAdapter<String> fileDBAdapter;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
ListView list = (ListView) findViewById(R.id.listView); fileDBAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1); list.setAdapter(fileDBAdapter);
FirebaseDatabase fireDB = FirebaseDatabase.getInstance(); DatabaseReference myRef = fireDB.getReference("聯絡人"); myRef.addChildEventListener(this); }
@Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { fileDBAdapter.add( String.valueOf(dataSnapshot.child("name").getValue())); }
@Override public void onChildRemoved(DataSnapshot dataSnapshot) { fileDBAdapter.remove( String.valueOf(dataSnapshot.child("name").getValue())); }
@Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { }
@Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { }
@Override public void onCancelled(DatabaseError databaseError) { } }
|