Android 空对象引用上的getPackageName()
当我从一个片段中打开一个活动时,有时会出现一个错误 因为我从API23知道它应该是getContext,所以出于这个原因,我还对我的代码实现了如下的try-catchAndroid 空对象引用上的getPackageName(),android,android-activity,nullpointerexception,fragment,Android,Android Activity,Nullpointerexception,Fragment,当我从一个片段中打开一个活动时,有时会出现一个错误 因为我从API23知道它应该是getContext,所以出于这个原因,我还对我的代码实现了如下的try-catch authStateListener = new FirebaseAuth.AuthStateListener() { @RequiresApi(api = Build.VERSION_CODES.M) @Override public void onAuthS
authStateListener = new FirebaseAuth.AuthStateListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser()!=null) {
try {
Intent intent = new Intent(getContext(), Home_page.class);
startActivity(intent);
} catch (Exception e) {
Intent intent = new Intent(getActivity(), Home_page.class);
startActivity(intent);
}
}
}
但有时它也会在Context.getPackageName()上出现空指针对象引用错误。可能的原因是什么?异步调用的侦听器可以在调用实体的任何状态下触发。因此,在本例中,您应该首先检查
上下文
或isAdded()
中是否存在实体。下面是一个例子
authStateListener = new FirebaseAuth.AuthStateListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() != null) {
if (getActivity() != null) {
Intent intent = new Intent(getActivity(), Home_page.class);
startActivity(intent);
}
}
}
你在哪里调用这个代码块。添加整个类。我已将此代码放在firebase auth state Listener=new FirebaseAuth.AuthStateListener(){@RequiresApi(api=Build.VERSION_CODES.M)@重写AuthStateChanged(@NonNull FirebaseAuth FirebaseAuth FirebaseAuth){if(FirebaseAuth.getCurrentUser()!=null){你能发布整个类吗?好的,我会发布整个类什么是异步调用,长官??一个异步调用的调用。你注册了
authStateListener
,用户离开了活动,你没有注销监听器,监听器被调用,getActivity
返回null。Boom!Firebase提供了添加和删除的方法删除侦听器。要删除侦听器,您必须传递与添加的实例相同的实例。请查看文档。