在我的应用程序中,我需要一些活动可以访问的数据。我读过一个很好的解决方案是为此使用Application类。所以我这样使用它:
public class MyApplication extends Application {
private String str;
public String getStr(){
return str;
}
public void setStr(String s){
str = s;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以从以下活动中访问此变量:
MyApplication appState = ((MyApplication)getApplicationContext());
String str = appState.getStr();
Run Code Online (Sandbox Code Playgroud)
可以,但是我也有xml解析器类:
public class MyXMLHandler extends DefaultHandler {
Run Code Online (Sandbox Code Playgroud)
如果我尝试在这里做同样的事情
MyApplication app = ((MyApplication)getApplicationContext());
String str = app.getStr();
Run Code Online (Sandbox Code Playgroud)
我越来越 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());
Run Code Online (Sandbox Code Playgroud)
您应该真正确保将“工具”与任何妨碍您普遍使用的工具分开。如果您想在另一个项目中使用XML Parser类的情况下,该项目的参数不是由应用程序上下文提供,而是由其他类提供,将会发生什么情况?
我敢肯定,您可以进行为期一周的有关面向对象设计以及应该如何做的讨论-但这基本上就是我要做的事情...
| 归档时间: |
|
| 查看次数: |
4317 次 |
| 最近记录: |