从android中的firebase数据库中检索数据

时间:2016-03-07 15:54:10

标签: android firebase firebase-realtime-database

我最近迁移到了Firebase。我已经通过Firebase Android api文档通过JSON从数据库中检索数据。有方法onDataChange(DataSnapshot snapshot)可以在数据库中的数据发生变化时检索数据,但即使数据库中没有变化,我也能找到如何检索数据。

例如: - 当用户登录我的应用程序时,我希望检索存储在唯一ID节点下的数据。如果需要,如何随时从Firebase数据库检索数据?

2 个答案:

答案 0 :(得分:2)

来自Firebase guide on reading data

  

[onDataChange()方法]使用初始数据触发一次,每次数据更改时再次触发。

我强烈建议您阅读Firebase guide for Android programming端到端。当您开始使用Firebase时,它会回答您可能遇到的许多问题。

答案 1 :(得分:0)

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

https://stackoverflow.com/a/45328201/5973946