從 firebase 獲取值
- 建立類並新增匯入以解析資訊:
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.IgnoreExtraProperties;
//Declaration of firebase references
private DatabaseReference mDatabase;
//Declaration of firebase atributtes
public String uID;
public String username;
public String email;
@IgnoreExtraProperties
public class User {
//Default constructor
public User() {
//Default constructor required for calls to DataSnapshot.getValue(User.class)
mDatabase = FirebaseDatabase.getInstance().getReference();
//...
}
//...
}
- 將
addListenerForSingleValueEvent()
新增到我們的資料庫參考:
//Add new imports
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;
//...
public void getUser(String uID){
//The uID it's unique id generated by firebase database
mDatabase.child("users").child(uID).addListenerForSingleValueEvent(
new ValueEventListener () {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
}
});
}
- 在
onDataChange()
活動中通過 firebase 資訊為我們的類充氣:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Inflate class with dataSnapShot
Users user = dataSnapshot.getValue(Users.class);
//...
}
- 最後,通常我們可以從 firebase 類獲得不同的屬性:
//User inflated
Users user = dataSnapshot.getValue(Users.class);
//Get information
this.uID = user.uID;
this.username = user.username;
this.email = user.email;
最佳做法
- firebase 支援 32 個不同的子級別,然後很容易編寫錯誤的引用,以轉義這個建立最終的私有引用:
//Declaration of firebase references
//...
final private DatabaseReference userRef = mDatabase.child("users").child("premium").child("normal").getRef();
//...
public void getUser(String uID){
//Call our reference
userRef.child(uID).addListenerForSingleValueEvent(
new ValueEventListener () {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
}
});
}
- 當使用者無法通過資料庫規則訪問此引用時,將呼叫
onCancelled()
事件。如果需要,新增相關程式碼來控制此異常。
有關更多資訊,請訪問官方文件