从片段中的Activity中获取Firebase异步检索的数据

时间:2017-07-12 10:04:15

标签: android android-fragments firebase firebase-realtime-database firebase-authentication

我有一个包含6个片段的Activity(NavigationDrawer Activity)。在每个片段中,我都需要访问存储在Firebase中的User数据。现在,在onCreateView()我的片段中,我可以打电话:

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            firebaseUser = firebaseAuth.getCurrentUser();
            if (firebaseUser != null) {
                Log.e(TAG, "onAuthStateChanged:signed_in: " + firebaseUser.getUid());
                valueEventListener = new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        teylurUser = dataSnapshot.getValue(TeylurUser.class);                          
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                };

                mDatabaseReference.child("users")
                        .child(firebaseUser.getUid())
                        .addValueEventListener(valueEventListener);
                mDatabaseReference.keepSynced(true);

            } else {
                Toast.makeText(getApplicationContext(), "Could not load content at this time.", Toast.LENGTH_SHORT).show();
            }
        }
    };

从DataSnapshot获取TeylurUser。但是在所有六个片段中调用此代码似乎过多了。我决定在包含Activity的onCreate()方法中调用代码,然后在全局变量中保存TeylurUser的字段,然后使用这样的访问器方法在每个Fragment中访问它们:

businessAddress = ((MainActivity) getActivity()).getBusinessAddress();

问题

除非我在businessAddress语句中包含任何试图使用if (businessAddress != null)的代码,否则app会崩溃NullPointerException

但如果第二次调用onCreateView,则businessAddress不为空。

我尝试在片段的onAttach()方法中查询MainActivity而没有运气。

我现在能想到的唯一解决方案是将TeylurUser保存在SQLite数据库中,然后在我的片段中使用数据库数据,但我只需要知道我当前的方法是否可行。

0 个答案:

没有答案