如何从非活动类中检索上下文?

2022-09-03 13:15:03

我找到了一个答案,似乎说我应该创建一个单独的类,并创建一个静态的MyApplication对象并创建一个get方法。然后,任何类都可以调用 MyApplication.get() 来检索上下文。

还有其他更清洁的方法吗?这是我的情况:

我有一个类A和一个类B.类A包含来自B类的对象(我们称之为对象b)。在A类中,我称之为“b.play()”。但是,我得到一个空指针异常,因为类 B 需要将上下文传递给 MediaPlayer.create() 方法。

直到现在,我才想出一个黑客,从A班我打电话给....“b.play(this)”,并简单地将上下文传递给B。然而,这是非常丑陋的,看起来像是OOP的糟糕用法。

有什么想法吗?


答案 1

这个问题似乎在Android开发中经常出现。获取对特定上下文的引用的一种解决方案是子类化应用程序并获取对所需上下文的引用。

public class MyApplication extends Application { 

private Context context;

@Override
public onCreate() {
  super.onCreate();
  this.context = getApplicationContext() // Grab the Context you want.
}

public static Context getApplicationContext() { return this.context; }
}

但是,此解决方案要求您在清单中指定子类的名称。

<application
    android:name=".MyApplication"
</application>

然后,您可以在应用程序中的任何地方使用它,就像在非活动类中一样。

MyApplication.getContext();  // Do something with the context! :)

答案 2

如果类B需要上下文才能运行,那么我认为A类提供它没有任何问题(通过play方法上的参数,构造函数中的参数等)。

我不认为你通过向B类提供它完成工作所需的依赖关系来做任何糟糕的OOP。


推荐