我有一个包含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数据库中,然后在我的片段中使用数据库数据,但我只需要知道我当前的方法是否可行。