Java 如何在android中跟踪另一类活动的事件?

Java 如何在android中跟踪另一类活动的事件?,java,android,rx-java2,Java,Android,Rx Java2,我试图通过在活动中创建接口并在该类中实现该接口来跟踪另一个类中的事件(OnActivityResult)。像这样: OnAuthCompletedListener listener; public void setOnAuthCompletedListener(OnAuthCompletedListener listener){ this.listener = listener; } public interface OnAuthCompletedListener {

我试图通过在活动中创建接口并在该类中实现该接口来跟踪另一个类中的事件(
OnActivityResult
)。像这样:

OnAuthCompletedListener listener;

public void setOnAuthCompletedListener(OnAuthCompletedListener listener){
      this.listener = listener;  
}

public interface OnAuthCompletedListener {
     void OnAuthCompleted(Auth auth)
}
在另一节课上我写了

MainActivity activity= new MainActivity();
activity.setOnAuthCompletedListener(auth->{

});
但每当事件发生时,应用程序就会与NPE一起崩溃。我知道我使用的是与真实实例不同的活动实例。我的问题是如何在非活动类中使用该接口

我也知道使用RXJava有更好的解决方案,但我还不够聪明,无法实现这一点,有人能帮忙吗?

让我们假设“另一个类”

声明
ArrayList registeredInterfaces=new ArrayList()在authCompletedListener上实现该类,
(因此在本例中:
另一个类
,但可以有多个不同的类实现该接口),都要在数组中注册它的侦听器

当您
null
ing/销毁此
newAnotherClass
实例时,请注销其侦听器

newAnotherClass.destroy();
registeredInterfaces.remove(newAnotherClass);
newAnotherClass = null;

现在,当在
活动中调用
OnAuthCompletedListener
时,遍历此数组并调用每个注册的
OnAuthCompletedListener.OnAuthCompleted
。当
Activity
被销毁时,不要忘记清除这个数组,只是为了确保没有内存泄漏

你的“另一个类”应该得到真正的工作
Activity
引用,而不是
new
one如何实现这一点?好吧,也许可以引入新方法
public void setActivityForListener(Activity-act)
或者只显示您的“另一个类”,编写answerwell会更容易。出于官方原因,我无法显示该类,但它是一个提供程序类,没有该类中任何上下文或活动的引用。如果没有代码,很难猜测哪个解决方案适合您的需要。但是我已经发布了一些基本的方法作为答案,检查这个,我在我的应用程序类中获取了一个MainActivity实例,并在onCreate()中初始化了它,然后在另一个类中,我没有获取该活动的新实例,而是使用了MyApplication.getInstance().MainActivity.setOnAuthCompletedListener。现在NP异常并没有发生,并且解决了这个问题,但这是一个godd方法吗?嗯,这是非常值得怀疑的
MyApplication.getInstance()
不是干净可靠的解决方法,在某些情况下,它可能返回
null
,但当您仅处理
活动时,它就会工作。仔细阅读帖子和所有答案,包括更多信息的评论
AnotherClass newAnotherClass = new AnotherClass(); 
registeredInterfaces.add(newAnotherClass);
newAnotherClass.destroy();
registeredInterfaces.remove(newAnotherClass);
newAnotherClass = null;