Android - 開發Firebase專案 - Database 篇

開始之前, 需要先完成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) { }
}
作者

Nick Lin

發表於

2017-04-20

更新於

2023-01-18

許可協議


評論