在 android 中从 firebase 数据库检索数据
Retrieving data from firebase database in android
我最近迁移到了 Firebase。我已经通过 Firebase Android api 文档通过 JSON 从数据库中检索数据。有一种方法 onDataChange(DataSnapshot snapshot)
可以在数据库中的数据发生变化时检索数据,但我可以找到即使数据库中没有变化也可以检索数据的方法。
例如:- 当用户登录我的应用程序时,我希望检索存储在唯一 ID 节点下的数据。如果需要,如何随时从 Firebase 数据库检索数据?
来自Firebase guide on reading data:
[the onDataChange()
method is] triggered once with the initial data and again every time the data changes.
我强烈建议您通读 Firebase guide for Android programming。它会回答您在开始使用 Firebase 时可能遇到的许多问题。
Firebase 读写数据库指南:
https://firebase.google.com/docs/database/android/read-and-write
public class NavigationActivity extends AppCompatActivity{
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initializeAuthListener();
mDatabase = FirebaseDatabase.getInstance().getReference();
}
private void initializeAuthListener() {
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
firebaseUser = firebaseAuth.getInstance().getCurrentUser();
try {
if (firebaseAuth != null) {
loadUserDetails();
Log.d("@@@@", "thread:signed_in:" + firebaseUser.getUid());
} else {
Log.d("@@@@", "thread:signed_out");
Intent login = new Intent(NavigationActivity.this, LoginActivity.class);
startActivity(login);
finish();
}
}catch (Exception e){
Intent login = new Intent(NavigationActivity.this, LoginActivity.class);
startActivity(login);
finish();
}
}
};
mAuth.addAuthStateListener(mAuthListener);
}
private void loadUserDetails() {
DatabaseReference userReference = mDatabase
.child("users").child(firebaseUser.getUid());
// displayUserDetails(userReference);
userReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
user = dataSnapshot.getValue(User.class);
tv_user_name.setText(user.getDisplayName());
tv_user_email_nav.setText(user.getEmail());
Glide.with(NavigationActivity.this)
.load(user.getPhotoUrl())
.placeholder(R.mipmap.profile)
.centerCrop()
.dontAnimate()
.bitmapTransform(new CropCircleTransformation(NavigationActivity.this))
.into(iv_user_image);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Toast.makeText(ThreadActivity.this, R.string.error_loading_user, Toast.LENGTH_SHORT).show();
// finish();
}
});
}
}
我最近迁移到了 Firebase。我已经通过 Firebase Android api 文档通过 JSON 从数据库中检索数据。有一种方法 onDataChange(DataSnapshot snapshot)
可以在数据库中的数据发生变化时检索数据,但我可以找到即使数据库中没有变化也可以检索数据的方法。
例如:- 当用户登录我的应用程序时,我希望检索存储在唯一 ID 节点下的数据。如果需要,如何随时从 Firebase 数据库检索数据?
来自Firebase guide on reading data:
[the
onDataChange()
method is] triggered once with the initial data and again every time the data changes.
我强烈建议您通读 Firebase guide for Android programming。它会回答您在开始使用 Firebase 时可能遇到的许多问题。
Firebase 读写数据库指南: https://firebase.google.com/docs/database/android/read-and-write
public class NavigationActivity extends AppCompatActivity{
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initializeAuthListener();
mDatabase = FirebaseDatabase.getInstance().getReference();
}
private void initializeAuthListener() {
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
firebaseUser = firebaseAuth.getInstance().getCurrentUser();
try {
if (firebaseAuth != null) {
loadUserDetails();
Log.d("@@@@", "thread:signed_in:" + firebaseUser.getUid());
} else {
Log.d("@@@@", "thread:signed_out");
Intent login = new Intent(NavigationActivity.this, LoginActivity.class);
startActivity(login);
finish();
}
}catch (Exception e){
Intent login = new Intent(NavigationActivity.this, LoginActivity.class);
startActivity(login);
finish();
}
}
};
mAuth.addAuthStateListener(mAuthListener);
}
private void loadUserDetails() {
DatabaseReference userReference = mDatabase
.child("users").child(firebaseUser.getUid());
// displayUserDetails(userReference);
userReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
user = dataSnapshot.getValue(User.class);
tv_user_name.setText(user.getDisplayName());
tv_user_email_nav.setText(user.getEmail());
Glide.with(NavigationActivity.this)
.load(user.getPhotoUrl())
.placeholder(R.mipmap.profile)
.centerCrop()
.dontAnimate()
.bitmapTransform(new CropCircleTransformation(NavigationActivity.this))
.into(iv_user_image);
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Toast.makeText(ThreadActivity.this, R.string.error_loading_user, Toast.LENGTH_SHORT).show();
// finish();
}
});
}
}