gpt4 book ai didi

java - 从 Activity 以外的类访问 Application 类

转载 作者:行者123 更新时间:2023-11-29 08:17:17 24 4
gpt4 key购买 nike

在我的应用程序中,我需要一些 Activity 可以访问的数据。我读到一个好的解决方案是为此使用 Application 类。所以我这样使用它:

public class MyApplication extends Application {

private String str;

public String getStr(){
return str;
}
public void setStr(String s){
str = s;
}
}

我可以像这样从 Activity 中访问这个变量:

MyApplication appState = ((MyApplication)getApplicationContext());
String str = appState.getStr();

没关系,但我还有 xml 解析器类:

public class MyXMLHandler extends DefaultHandler {

如果我在这里尝试做同样的事情

    MyApplication app = ((MyApplication)getApplicationContext());
String str = app.getStr();

我得到 The method getApplicationContext() is undefined for the type MyXMLHandler

如何访问我的变量?

最佳答案

嗯,通常一个 XML 解析器类应该独立于任何特殊的上下文。这意味着开发人员无论是在开发应用程序、服务、库还是其他任何东西,都应该能够使用它。

XML 解析器类不应该对其使用的上下文以及从何处获取参数做出任何假设(您将限制您的解析器仅在它有权访问 Application 实例)。解析器不应获取其参数,参数应由调用者设置。

您也不希望 XML 解析器类向用户显示消息,对吗?正确:“XML 解析器与用户界面有什么关系?”相反,您会抛出异常并确保它们得到正确处理,例如取决于是否有用户界面(日志记录)。

因此,您要做的就是在构造 XML 解析器实例时传递所需的参数。但是您将您的应用程序实例作为参数传递(再次考虑依赖项),而是从您的应用程序类传递必要的参数。

在你上面的例子中:

MyApplication app = ((MyApplication)getApplicationContext());
MyXmlHandler handler = new MyXmlHandler(app.getStr());

您真的应该确保将“工具 Material ”与任何会阻止您普遍使用它的东西分开。如果您想在另一个项目中使用您的 XML 解析器类,而您的参数不是由应用程序上下文提供,而是由其他类提供,会发生什么情况?

我敢肯定,您可以就面向对象设计以及事情应该如何完成进行为期一周的讨论——但这基本上就是我要做的...

关于java - 从 Activity 以外的类访问 Application 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3666368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com