【发布时间】:2018-09-17 19:39:27
【问题描述】:
我正在使用 Android Studio,我想知道应用程序在任何地方的目录(意味着每个非静态类)。
问题是,我正在创建一个名为 Constants 的类来总结我的应用程序中的任意常量。除了与应用程序目录相关的常量外,我的所有常量目前都是静态和公共的。我还实现了 Serializable 以将常量文件存储在某个文件中。我将通过 Constants 类中的静态方法导出和导入常量。真的是静态的:))
我知道 Context 类中的 getFilesDir() 不是静态的,这意味着我不能调用 MainActivity.getFilesDir().getAbsolutePath() 之类的东西,其中 MainActivity 扩展了 Activity 扩展了 Context。
我也不能这样做:
public transient static MainActivity someActivity = new MainActivity();
public transient static String parentAbsolutePath = someActivity.getFilesDir().getAbsolutePath();
因为它会在现有 UI 线程之外创建一个新的 UI 线程。
我知道有一种简单的方法可以做到这一点,那就是将 MainActivity 传递给构造函数,如下所示:
class Constants implements Serializable {
public transient static MainActivity mainActivity;
public transient static String parentAbsolutePath;
Constants(MainActivity mainActivity){
this.mainActivity = mainActivity;
this.parentAbsolutePath = mainActivity.getFilesDir().getAbsolutePath();
}
}
但是,在 MainActivity 中实例化Constants constants = new Constants(this) 很麻烦,而且它缺乏模块化,其他类在不实例化对象的情况下无法使用该类。
所以我的问题是,有没有一种方法可以访问类常量中的应用程序目录,而无需传入上下文扩展对象?
【问题讨论】:
-
你可以使用匕首。寻找依赖注入。它会帮助你。
标签: java android static serializable