在 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();
            }
        });
    }
}